@getquick/site 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2371 @@
1
+ # Ploi API endpoint inventory
2
+
3
+ > Research snapshot: 2026-09-18. This is a documentation inventory, not an implementation. It uses Ploi's first-party API reference and MCP documentation only. No live API mutations were made.
4
+
5
+ ## Scope and conventions
6
+
7
+ - **Coverage.** The official sitemap lists 224 API-reference pages under the resource paths, plus the documented [Teapot](https://developers.ploi.io/getting-started/teapot) endpoint. One resource page, [Insight types](https://developers.ploi.io/insights/insight-types), is a type catalogue rather than an HTTP endpoint, leaving **224 endpoint pages, 225 documented operation sections, and 226 route forms**: [Create custom server](https://developers.ploi.io/servers/create-custom-server) documents two operations, while [Laravel Horizon statistics](https://developers.ploi.io/sites/laravel-horizon-statistics) documents both the default route and an optional `/{type}` form. The sitemap is the coverage manifest: [developers.ploi.io/sitemap.xml](https://developers.ploi.io/sitemap.xml).
8
+ - **Base URL/authentication.** The base URL is `https://ploi.io/api`; send `Authorization: Bearer {token}`, `Accept: application/json`, and `Content-Type: application/json` as appropriate. The headers guide also says a descriptive `User-Agent` is required. Sources: [URL](https://developers.ploi.io/getting-started/url), [authorization](https://developers.ploi.io/getting-started/authorization), [headers](https://developers.ploi.io/getting-started/headers).
9
+ - **Path notation.** Braced segments are logical parameter names. Where the source cURL used a literal example ID/domain, this inventory normalizes it and flags the ambiguity in the notes.
10
+ - **Pagination.** A row marked 'yes' has the documented Laravel-style 'data' + 'links' + 'meta' envelope. Follow 'links.next'; the pagination guide documents 'page', 'per_page' (default 15, maximum 50; values above 50 revert to 15), and the query guide documents 'search' for list views. Sources: [pagination](https://developers.ploi.io/getting-started/pagination), [query parameters](https://developers.ploi.io/getting-started/query-parameters). A row marked 'no' does not show that envelope on its endpoint page; this is not an assertion that undocumented query parameters are rejected.
11
+ - **Request fields.** 'body' is the JSON field set shown under Required/Optional attributes or parameters; 'query' is shown under query-parameter headings or in the cURL URL. Required/optional status is copied from the page.
12
+ - **CLI names.** These are logical names proposed to fit this repository's vocabulary: existing commands are 'gq ploi servers list', 'gq ploi server show', 'gq ploi sites list', and 'gq ploi site show'; every other command below is **not currently implemented**. The current provider uses 'https://ploi.io/api', Bearer auth, unwraps 'data' for detail calls, and follows 'links.next' or 'meta.next_page_url'; source: [src/providers/ploi.mjs](../../src/providers/ploi.mjs) and [src/cli.mjs](../../src/cli.mjs).
13
+
14
+ ## aliases
15
+
16
+ ### Create alias
17
+
18
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/aliases`
19
+ - **Path parameters:** `server`, `site`
20
+ - **Request:** body — `aliases (array; required)`; query — —
21
+ - **Pagination:** no documented pagination envelope
22
+ - **Response:** `{ data: { aliases, count, main } }`
23
+ - **Logical CLI:** `gq ploi aliases create-alias`
24
+ - **Source:** [Ploi API reference — Create alias](https://developers.ploi.io/aliases/create-alias)
25
+
26
+ ### Delete alias
27
+
28
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{site}/aliases/{alias}`
29
+ - **Path parameters:** `server`, `site`, `alias`
30
+ - **Request:** body — —; query — —
31
+ - **Pagination:** no documented pagination envelope
32
+ - **Response:** `{ data: { aliases, count, main } }`; **notes:** source example uses a concrete ID/domain; normalized here
33
+ - **Logical CLI:** `gq ploi aliases delete-alias`
34
+ - **Source:** [Ploi API reference — Delete alias](https://developers.ploi.io/aliases/delete-alias)
35
+
36
+ ### List aliases
37
+
38
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/aliases`
39
+ - **Path parameters:** `server`, `site`
40
+ - **Request:** body — —; query — —
41
+ - **Pagination:** no documented pagination envelope
42
+ - **Response:** `{ data: { aliases, count, main } }`
43
+ - **Logical CLI:** `gq ploi aliases list-aliases`
44
+ - **Source:** [Ploi API reference — List aliases](https://developers.ploi.io/aliases/list-aliases)
45
+
46
+ ## apps
47
+
48
+ ### Install Nextcloud
49
+
50
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/nextcloud`
51
+ - **Path parameters:** `server`, `id`
52
+ - **Request:** body — —; query — —
53
+ - **Pagination:** no documented pagination envelope
54
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, created_at } }`
55
+ - **Logical CLI:** `gq ploi apps install-nextcloud`
56
+ - **Source:** [Ploi API reference — Install Nextcloud](https://developers.ploi.io/apps/install-nextcloud)
57
+
58
+ ### Install Statamic
59
+
60
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/statamic`
61
+ - **Path parameters:** `server`, `id`
62
+ - **Request:** body — `type (string; optional)`, `provider (string; optional)`, `name (string; optional)`, `private (boolean; optional)`, `description (string; optional)`, `installation_type (string; optional)`; query — —
63
+ - **Pagination:** no documented pagination envelope
64
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, has_repository, zero_downtime_deployment, fastcgi_cache, created_at }, message }`
65
+ - **Logical CLI:** `gq ploi apps install-statamic`
66
+ - **Source:** [Ploi API reference — Install Statamic](https://developers.ploi.io/apps/install-statamic)
67
+
68
+ ### Install WordPress
69
+
70
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress`
71
+ - **Path parameters:** `server`, `id`
72
+ - **Request:** body — `create_database (boolean; optional)`; query — —
73
+ - **Pagination:** no documented pagination envelope
74
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, created_at } }`
75
+ - **Logical CLI:** `gq ploi apps install-wordpress`
76
+ - **Source:** [Ploi API reference — Install WordPress](https://developers.ploi.io/apps/install-wordpress)
77
+
78
+ ### Uninstall Nextcloud
79
+
80
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/nextcloud`
81
+ - **Path parameters:** `server`, `id`
82
+ - **Request:** body — —; query — —
83
+ - **Pagination:** no documented pagination envelope
84
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, created_at } }`
85
+ - **Logical CLI:** `gq ploi apps uninstall-nextcloud`
86
+ - **Source:** [Ploi API reference — Uninstall Nextcloud](https://developers.ploi.io/apps/uninstall-nextcloud)
87
+
88
+ ### Uninstall Statamic
89
+
90
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/statamic`
91
+ - **Path parameters:** `server`, `id`
92
+ - **Request:** body — —; query — —
93
+ - **Pagination:** no documented pagination envelope
94
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, has_repository, zero_downtime_deployment, fastcgi_cache, created_at }, message }`
95
+ - **Logical CLI:** `gq ploi apps uninstall-statamic`
96
+ - **Source:** [Ploi API reference — Uninstall Statamic](https://developers.ploi.io/apps/uninstall-statamic)
97
+
98
+ ### Uninstall WordPress
99
+
100
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/wordpress`
101
+ - **Path parameters:** `server`, `id`
102
+ - **Request:** body — —; query — —
103
+ - **Pagination:** no documented pagination envelope
104
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, created_at } }`
105
+ - **Logical CLI:** `gq ploi apps uninstall-wordpress`
106
+ - **Source:** [Ploi API reference — Uninstall WordPress](https://developers.ploi.io/apps/uninstall-wordpress)
107
+
108
+ ## auth-users
109
+
110
+ ### Create auth user
111
+
112
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/auth-users`
113
+ - **Path parameters:** `server`, `id`
114
+ - **Request:** body — `name (string; required)`, `password (string; required)`, `path (string; optional)`; query — —
115
+ - **Pagination:** no documented pagination envelope
116
+ - **Response:** `{ data: { id, name, path, created_at } }`
117
+ - **Logical CLI:** `gq ploi auth-users create-auth-user`
118
+ - **Source:** [Ploi API reference — Create auth user](https://developers.ploi.io/auth-users/create-auth-user)
119
+
120
+ ### Delete auth user
121
+
122
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/auth-users/{authUserId}`
123
+ - **Path parameters:** `server`, `id`, `authUserId`
124
+ - **Request:** body — —; query — —
125
+ - **Pagination:** no documented pagination envelope
126
+ - **Response:** `{ data: { id, name, path, created_at } }`
127
+ - **Logical CLI:** `gq ploi auth-users delete-auth-user`
128
+ - **Source:** [Ploi API reference — Delete auth user](https://developers.ploi.io/auth-users/delete-auth-user)
129
+
130
+ ### Get auth user
131
+
132
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/auth-users/{authUserId}`
133
+ - **Path parameters:** `server`, `id`, `authUserId`
134
+ - **Request:** body — —; query — —
135
+ - **Pagination:** no documented pagination envelope
136
+ - **Response:** `{ data: { id, name, path, created_at } }`
137
+ - **Logical CLI:** `gq ploi auth-users show-auth-user`
138
+ - **Source:** [Ploi API reference — Get auth user](https://developers.ploi.io/auth-users/get-auth-user)
139
+
140
+ ### List auth users
141
+
142
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/auth-users`
143
+ - **Path parameters:** `server`, `id`
144
+ - **Request:** body — —; query — —
145
+ - **Pagination:** no documented pagination envelope
146
+ - **Response:** `{ data: array of { id, name, path, created_at } }`
147
+ - **Logical CLI:** `gq ploi auth-users list-auth-users`
148
+ - **Source:** [Ploi API reference — List auth users](https://developers.ploi.io/auth-users/list-auth-users)
149
+
150
+ ## certificates
151
+
152
+ ### Activate certificate
153
+
154
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/certificates/{certificate}/activate`
155
+ - **Path parameters:** `server`, `site`, `certificate`
156
+ - **Request:** body — —; query — —
157
+ - **Pagination:** no documented pagination envelope
158
+ - **Response:** `{ data: { id, status, domain, type, active, tenant, site_id, site_tenant_id, server_id, expires_at, created_at } }`
159
+ - **Logical CLI:** `gq ploi certificates activate-certificate`
160
+ - **Source:** [Ploi API reference — Activate certificate](https://developers.ploi.io/certificates/activate-certificate)
161
+
162
+ ### Create certificate
163
+
164
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/certificates`
165
+ - **Path parameters:** `server`, `site`
166
+ - **Request:** body — `type (string; required)`, `certificate (string; required)`, `private (string; optional)`, `force (boolean; optional)`, `additional (object; optional)`; query — —
167
+ - **Pagination:** no documented pagination envelope
168
+ - **Response:** `{ data: { id, status, domain, type, site_id, server_id, expires_at, created_at } }`
169
+ - **Logical CLI:** `gq ploi certificates create-certificate`
170
+ - **Source:** [Ploi API reference — Create certificate](https://developers.ploi.io/certificates/create-certificate)
171
+
172
+ ### Delete certificate
173
+
174
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{site}/certificates/{certificate}`
175
+ - **Path parameters:** `server`, `site`, `certificate`
176
+ - **Request:** body — —; query — —
177
+ - **Pagination:** no documented pagination envelope
178
+ - **Response:** `{ message }`
179
+ - **Logical CLI:** `gq ploi certificates delete-certificate`
180
+ - **Source:** [Ploi API reference — Delete certificate](https://developers.ploi.io/certificates/delete-certificate)
181
+
182
+ ### Download certificate
183
+
184
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/certificates/{certificate}/download`
185
+ - **Path parameters:** `server`, `site`, `certificate`
186
+ - **Request:** body — —; query — —
187
+ - **Pagination:** no documented pagination envelope
188
+ - **Response:** `{ certificate, certificate_path, expires_at }`; **notes:** on-demand execution/retrieval is documented; 422 behavior documented; private key is not returned
189
+ - **Logical CLI:** `gq ploi certificates download-certificate`
190
+ - **Source:** [Ploi API reference — Download certificate](https://developers.ploi.io/certificates/download-certificate)
191
+
192
+ ### Get certificate
193
+
194
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/certificates/{certificate}`
195
+ - **Path parameters:** `server`, `site`, `certificate`
196
+ - **Request:** body — —; query — —
197
+ - **Pagination:** no documented pagination envelope
198
+ - **Response:** `{ data: { id, status, domain, type, active, site_id, server_id, expires_at, created_at } }`
199
+ - **Logical CLI:** `gq ploi certificates show-certificate`
200
+ - **Source:** [Ploi API reference — Get certificate](https://developers.ploi.io/certificates/get-certificate)
201
+
202
+ ### List certificates
203
+
204
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/certificates`
205
+ - **Path parameters:** `server`, `site`
206
+ - **Request:** body — —; query — —
207
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
208
+ - **Response:** `{ data: array of { id, status, domain, type, active, site_id, server_id, expires_at, created_at }, links, meta }`
209
+ - **Logical CLI:** `gq ploi certificates list-certificates`
210
+ - **Source:** [Ploi API reference — List certificates](https://developers.ploi.io/certificates/list-certificates)
211
+
212
+ ## containers
213
+
214
+ ### Container logs
215
+
216
+ - **Method/path:** `GET /api/servers/{server}/docker/containers/{container}/logs`
217
+ - **Path parameters:** `server`, `container`
218
+ - **Request:** body — `lines (integer; optional)`; query — `lines=100`
219
+ - **Pagination:** no documented pagination envelope
220
+ - **Response:** `{ content }`; **notes:** 404 behavior documented
221
+ - **Logical CLI:** `gq ploi containers container-logs`
222
+ - **Source:** [Ploi API reference — Container logs](https://developers.ploi.io/containers/container-logs)
223
+
224
+ ### Create container
225
+
226
+ - **Method/path:** `POST /api/servers/{server}/docker/containers`
227
+ - **Path parameters:** `server`
228
+ - **Request:** body — `name (string; required)`, `deploy_script (string; optional)`; query — —
229
+ - **Pagination:** no documented pagination envelope
230
+ - **Response:** `{ id, status, name, deploy_script, path, last_deploy_at, created_at, type, state }`
231
+ - **Logical CLI:** `gq ploi containers create-container`
232
+ - **Source:** [Ploi API reference — Create container](https://developers.ploi.io/containers/create-container)
233
+
234
+ ### Delete container
235
+
236
+ - **Method/path:** `DELETE /api/servers/{server}/docker/containers/{container}`
237
+ - **Path parameters:** `server`, `container`
238
+ - **Request:** body — —; query — —
239
+ - **Pagination:** no documented pagination envelope
240
+ - **Response:** `{ message }`; **notes:** source example uses a concrete ID/domain; normalized here
241
+ - **Logical CLI:** `gq ploi containers delete-container`
242
+ - **Source:** [Ploi API reference — Delete container](https://developers.ploi.io/containers/delete-container)
243
+
244
+ ### Get container
245
+
246
+ - **Method/path:** `GET /api/servers/{server}/docker/containers/{container}`
247
+ - **Path parameters:** `server`, `container`
248
+ - **Request:** body — —; query — —
249
+ - **Pagination:** no documented pagination envelope
250
+ - **Response:** `{ id, status, name, deploy_script, path, last_deploy_at, created_at, type, state }`; **notes:** source example uses a concrete ID/domain; normalized here
251
+ - **Logical CLI:** `gq ploi containers show-container`
252
+ - **Source:** [Ploi API reference — Get container](https://developers.ploi.io/containers/get-container)
253
+
254
+ ### Link site
255
+
256
+ - **Method/path:** `POST /api/servers/{server}/docker/containers/{container}/site/link`
257
+ - **Path parameters:** `server`, `container`
258
+ - **Request:** body — `site_id (integer; required)`, `port (integer; required)`, `host (string; required)`; query — —
259
+ - **Pagination:** no documented pagination envelope
260
+ - **Response:** `{ message }`; **notes:** source example uses a concrete ID/domain; normalized here
261
+ - **Logical CLI:** `gq ploi containers link-site`
262
+ - **Source:** [Ploi API reference — Link site](https://developers.ploi.io/containers/link-site)
263
+
264
+ ### List containers
265
+
266
+ - **Method/path:** `GET /api/servers/{server}/docker/containers`
267
+ - **Path parameters:** `server`
268
+ - **Request:** body — —; query — —
269
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
270
+ - **Response:** `{ data: array of { id, status, name, deploy_script, path, last_deploy_at, created_at, type, state }, links, meta }`
271
+ - **Logical CLI:** `gq ploi containers list-containers`
272
+ - **Source:** [Ploi API reference — List containers](https://developers.ploi.io/containers/list-containers)
273
+
274
+ ### Start container
275
+
276
+ - **Method/path:** `POST /api/servers/{server}/docker/containers/{container}/up`
277
+ - **Path parameters:** `server`, `container`
278
+ - **Request:** body — `flags (array; optional)`; query — —
279
+ - **Pagination:** no documented pagination envelope
280
+ - **Response:** `{ message }`; **notes:** operation may be queued/backgrounded
281
+ - **Logical CLI:** `gq ploi containers start-container`
282
+ - **Source:** [Ploi API reference — Start container](https://developers.ploi.io/containers/start-container)
283
+
284
+ ### Stop container
285
+
286
+ - **Method/path:** `POST /api/servers/{server}/docker/containers/{container}/down`
287
+ - **Path parameters:** `server`, `container`
288
+ - **Request:** body — `flags (array; optional)`; query — —
289
+ - **Pagination:** no documented pagination envelope
290
+ - **Response:** `{ message }`; **notes:** operation may be queued/backgrounded
291
+ - **Logical CLI:** `gq ploi containers stop-container`
292
+ - **Source:** [Ploi API reference — Stop container](https://developers.ploi.io/containers/stop-container)
293
+
294
+ ### Unlink site
295
+
296
+ - **Method/path:** `DELETE /api/servers/{server}/docker/containers/{container}/site/unlink`
297
+ - **Path parameters:** `server`, `container`
298
+ - **Request:** body — —; query — —
299
+ - **Pagination:** no documented pagination envelope
300
+ - **Response:** `{ message }`; **notes:** source example uses a concrete ID/domain; normalized here
301
+ - **Logical CLI:** `gq ploi containers unlink-site`
302
+ - **Source:** [Ploi API reference — Unlink site](https://developers.ploi.io/containers/unlink-site)
303
+
304
+ ### Update container
305
+
306
+ - **Method/path:** `PATCH /api/servers/{server}/docker/containers/{container}`
307
+ - **Path parameters:** `server`, `container`
308
+ - **Request:** body — `name (string; optional)`, `deploy_script (string; optional)`; query — —
309
+ - **Pagination:** no documented pagination envelope
310
+ - **Response:** `{ id, status, name, deploy_script, path, last_deploy_at, created_at, type, state }`; **notes:** source example uses a concrete ID/domain; normalized here
311
+ - **Logical CLI:** `gq ploi containers update-container`
312
+ - **Source:** [Ploi API reference — Update container](https://developers.ploi.io/containers/update-container)
313
+
314
+ ## crontabs
315
+
316
+ ### Create crontab
317
+
318
+ - **Method/path:** `POST /api/servers/{server}/crontabs`
319
+ - **Path parameters:** `server`
320
+ - **Request:** body — `user (string; required)`, `command (string; required)`, `frequency (string; required)`; query — —
321
+ - **Pagination:** no documented pagination envelope
322
+ - **Response:** `{ data: { id, command, user, frequency, created_at } }`
323
+ - **Logical CLI:** `gq ploi crontabs create-crontab`
324
+ - **Source:** [Ploi API reference — Create crontab](https://developers.ploi.io/crontabs/create-crontab)
325
+
326
+ ### Delete crontab
327
+
328
+ - **Method/path:** `DELETE /api/servers/{server}/crontabs/{id}`
329
+ - **Path parameters:** `server`, `id`
330
+ - **Request:** body — —; query — —
331
+ - **Pagination:** no documented pagination envelope
332
+ - **Response:** `empty response body`; **notes:** documented empty response body
333
+ - **Logical CLI:** `gq ploi crontabs delete-crontab`
334
+ - **Source:** [Ploi API reference — Delete crontab](https://developers.ploi.io/crontabs/delete-crontab)
335
+
336
+ ### Get crontab
337
+
338
+ - **Method/path:** `GET /api/servers/{server}/crontabs/{id}`
339
+ - **Path parameters:** `server`, `id`
340
+ - **Request:** body — —; query — —
341
+ - **Pagination:** no documented pagination envelope
342
+ - **Response:** `{ data: { id, command, user, frequency, created_at } }`
343
+ - **Logical CLI:** `gq ploi crontabs show-crontab`
344
+ - **Source:** [Ploi API reference — Get crontab](https://developers.ploi.io/crontabs/get-crontab)
345
+
346
+ ### List crontabs
347
+
348
+ - **Method/path:** `GET /api/servers/{server}/crontabs`
349
+ - **Path parameters:** `server`
350
+ - **Request:** body — —; query — —
351
+ - **Pagination:** no documented pagination envelope
352
+ - **Response:** `{ data: array of { id, command, user, frequency, created_at } }`
353
+ - **Logical CLI:** `gq ploi crontabs list-crontabs`
354
+ - **Source:** [Ploi API reference — List crontabs](https://developers.ploi.io/crontabs/list-crontabs)
355
+
356
+ ## daemons
357
+
358
+ ### Create daemon
359
+
360
+ - **Method/path:** `POST /api/servers/{server}/daemons`
361
+ - **Path parameters:** `server`
362
+ - **Request:** body — `command (string; required)`, `system_user (string; required)`, `processes (integer; required)`, `directory (string; optional)`; query — —
363
+ - **Pagination:** no documented pagination envelope
364
+ - **Response:** `{ data: { id, command, processes, system_user, directory, status } }`; **notes:** operation may be queued/backgrounded
365
+ - **Logical CLI:** `gq ploi daemons create-daemon`
366
+ - **Source:** [Ploi API reference — Create daemon](https://developers.ploi.io/daemons/create-daemon)
367
+
368
+ ### Delete daemon
369
+
370
+ - **Method/path:** `DELETE /api/servers/{server}/daemons/{daemon}`
371
+ - **Path parameters:** `server`, `daemon`
372
+ - **Request:** body — —; query — —
373
+ - **Pagination:** no documented pagination envelope
374
+ - **Response:** `empty response body`; **notes:** documented empty response body
375
+ - **Logical CLI:** `gq ploi daemons delete-daemon`
376
+ - **Source:** [Ploi API reference — Delete daemon](https://developers.ploi.io/daemons/delete-daemon)
377
+
378
+ ### Get daemon
379
+
380
+ - **Method/path:** `GET /api/servers/{server}/daemons/{daemon}`
381
+ - **Path parameters:** `server`, `daemon`
382
+ - **Request:** body — —; query — —
383
+ - **Pagination:** no documented pagination envelope
384
+ - **Response:** `{ data: { id, command, processes, system_user, directory, status } }`
385
+ - **Logical CLI:** `gq ploi daemons show-daemon`
386
+ - **Source:** [Ploi API reference — Get daemon](https://developers.ploi.io/daemons/get-daemon)
387
+
388
+ ### List daemons
389
+
390
+ - **Method/path:** `GET /api/servers/{server}/daemons`
391
+ - **Path parameters:** `server`
392
+ - **Request:** body — —; query — —
393
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
394
+ - **Response:** `{ data: array of { id, command, processes, system_user, directory, status }, links, meta }`; **notes:** operation may be queued/backgrounded
395
+ - **Logical CLI:** `gq ploi daemons list-daemons`
396
+ - **Source:** [Ploi API reference — List daemons](https://developers.ploi.io/daemons/list-daemons)
397
+
398
+ ### Pause daemon
399
+
400
+ - **Method/path:** `POST /api/servers/{server}/daemons/{daemon}/toggle-pause`
401
+ - **Path parameters:** `server`, `daemon`
402
+ - **Request:** body — —; query — —
403
+ - **Pagination:** no documented pagination envelope
404
+ - **Response:** `{ data: { id, command, processes, status } }`
405
+ - **Logical CLI:** `gq ploi daemons pause-daemon`
406
+ - **Source:** [Ploi API reference — Pause daemon](https://developers.ploi.io/daemons/pause-daemon)
407
+
408
+ ### Restart daemon
409
+
410
+ - **Method/path:** `POST /api/servers/{server}/daemons/{daemon}/restart`
411
+ - **Path parameters:** `server`, `daemon`
412
+ - **Request:** body — —; query — —
413
+ - **Pagination:** no documented pagination envelope
414
+ - **Response:** `{ message }`
415
+ - **Logical CLI:** `gq ploi daemons restart-daemon`
416
+ - **Source:** [Ploi API reference — Restart daemon](https://developers.ploi.io/daemons/restart-daemon)
417
+
418
+ ## database-users
419
+
420
+ ### Attach user to database
421
+
422
+ - **Method/path:** `POST /api/servers/{server}/databases/{database}/users/attach`
423
+ - **Path parameters:** `server`, `database`
424
+ - **Request:** body — `user_id (integer; required)`; query — —
425
+ - **Pagination:** no documented pagination envelope
426
+ - **Response:** `{ data: { id, user, remote, remote_ip, readonly, created_at } }`; `{ message, errors }`; `{ message }`
427
+ - **Logical CLI:** `gq ploi database-users attach-user-to-database`
428
+ - **Source:** [Ploi API reference — Attach user to database](https://developers.ploi.io/database-users/attach-user-to-database)
429
+
430
+ ### Create database user
431
+
432
+ - **Method/path:** `POST /api/servers/{server}/databases/{database}/users`
433
+ - **Path parameters:** `server`, `database`
434
+ - **Request:** body — `user (string; required)`, `password (string; required)`, `remote (boolean; optional)`, `remote_ip (string; optional)`, `readonly (boolean; optional)`; query — —
435
+ - **Pagination:** no documented pagination envelope
436
+ - **Response:** `{ data: { id, user, remote, remote_ip, readonly, created_at } }`
437
+ - **Logical CLI:** `gq ploi database-users create-database-user`
438
+ - **Source:** [Ploi API reference — Create database user](https://developers.ploi.io/database-users/create-database-user)
439
+
440
+ ### Delete database user
441
+
442
+ - **Method/path:** `DELETE /api/servers/{server}/databases/{database}/users/{user}`
443
+ - **Path parameters:** `server`, `database`, `user`
444
+ - **Request:** body — —; query — —
445
+ - **Pagination:** no documented pagination envelope
446
+ - **Response:** `empty response body`; **notes:** documented empty response body
447
+ - **Logical CLI:** `gq ploi database-users delete-database-user`
448
+ - **Source:** [Ploi API reference — Delete database user](https://developers.ploi.io/database-users/delete-database-user)
449
+
450
+ ### Get database user
451
+
452
+ - **Method/path:** `GET /api/servers/{server}/databases/{database}/users/{user}`
453
+ - **Path parameters:** `server`, `database`, `user`
454
+ - **Request:** body — —; query — —
455
+ - **Pagination:** no documented pagination envelope
456
+ - **Response:** `{ data: { id, user, remote, remote_ip, readonly, created_at } }`
457
+ - **Logical CLI:** `gq ploi database-users show-database-user`
458
+ - **Source:** [Ploi API reference — Get database user](https://developers.ploi.io/database-users/get-database-user)
459
+
460
+ ### List database users
461
+
462
+ - **Method/path:** `GET /api/servers/{server}/databases/{database}/users`
463
+ - **Path parameters:** `server`, `database`
464
+ - **Request:** body — —; query — —
465
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
466
+ - **Response:** `{ data: array of { id, user, remote, remote_ip, readonly, created_at }, links, meta }`
467
+ - **Logical CLI:** `gq ploi database-users list-database-users`
468
+ - **Source:** [Ploi API reference — List database users](https://developers.ploi.io/database-users/list-database-users)
469
+
470
+ ## database
471
+
472
+ ### Create database backup
473
+
474
+ - **Method/path:** `POST /api/backups/database`
475
+ - **Path parameters:** —
476
+ - **Request:** body — `backup_configuration (integer; required)`, `server (integer; required)`, `databases (array; required)`, `interval (integer; required)`, `table_exclusions (string; optional)`, `locations (string; optional)`, `path (string; optional)`, `keep_backup_amount (integer; optional)`, `custom_name (string; optional)`, `password (string; optional)`, `next_backup_at (string; optional)`, `deleteOnFail (boolean; optional)`; query — —
477
+ - **Pagination:** no documented pagination envelope
478
+ - **Response:** `{ status, message }`
479
+ - **Logical CLI:** `gq ploi database-backups create-database-backup`
480
+ - **Source:** [Ploi API reference — Create database backup](https://developers.ploi.io/database/create-database-backup)
481
+
482
+ ### Delete database backup
483
+
484
+ - **Method/path:** `DELETE /api/backups/database/{databaseBackupId}`
485
+ - **Path parameters:** `databaseBackupId`
486
+ - **Request:** body — —; query — —
487
+ - **Pagination:** no documented pagination envelope
488
+ - **Response:** `{ status, message }`
489
+ - **Logical CLI:** `gq ploi database-backups delete-database-backup`
490
+ - **Source:** [Ploi API reference — Delete database backup](https://developers.ploi.io/database/delete-database-backup)
491
+
492
+ ### Get database backup
493
+
494
+ - **Method/path:** `GET /api/backups/database/{databaseBackupId}`
495
+ - **Path parameters:** `databaseBackupId`
496
+ - **Request:** body — —; query — —
497
+ - **Pagination:** no documented pagination envelope
498
+ - **Response:** `{ data: { id, status, label, type, type_human, path, remote_path, locations, interval, table_exclusions, keep_backup_amount, active, server, database, last_backup_at, created_at } }`
499
+ - **Logical CLI:** `gq ploi database-backups show-database-backup`
500
+ - **Source:** [Ploi API reference — Get database backup](https://developers.ploi.io/database/get-database-backup)
501
+
502
+ ### List database backups
503
+
504
+ - **Method/path:** `GET /api/backups/database`
505
+ - **Path parameters:** —
506
+ - **Request:** body — —; query — `server (integer; optional)`, `site (integer; optional)`, `per_page (integer; optional)`
507
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
508
+ - **Response:** `{ data: array of { id, status, label, type, type_human, path, remote_path, locations, interval, table_exclusions, keep_backup_amount, active, server, database, last_backup_at, created_at }, links, meta }`
509
+ - **Logical CLI:** `gq ploi database-backups list-database-backups`
510
+ - **Source:** [Ploi API reference — List database backups](https://developers.ploi.io/database/list-database-backups)
511
+
512
+ ### Run database backup
513
+
514
+ - **Method/path:** `POST /api/backups/database/{databaseBackupId}/run`
515
+ - **Path parameters:** `databaseBackupId`
516
+ - **Request:** body — —; query — —
517
+ - **Pagination:** no documented pagination envelope
518
+ - **Response:** `{ status, message }`
519
+ - **Logical CLI:** `gq ploi database-backups run-database-backup`
520
+ - **Source:** [Ploi API reference — Run database backup](https://developers.ploi.io/database/run-database-backup)
521
+
522
+ ### Update database backup
523
+
524
+ - **Method/path:** `PATCH /api/backups/database/{id}`
525
+ - **Path parameters:** `id`
526
+ - **Request:** body — `interval (integer; required)`, `keep_backup_amount (integer; required)`, `deleteOnFail (boolean; optional)`, `custom_name (string; optional)`, `path (string; optional)`, `compression (string; optional)`, `excluded (array; optional)`, `locations (string; optional)`, `next_backup_at (string; optional)`; query — —
527
+ - **Pagination:** no documented pagination envelope
528
+ - **Response:** `{ data: { id, type, path, compression, interval, keep_backup_amount, custom_name, delete_on_fail, excluded, locations, status, last_backup_at, next_backup_at, created_at, server, database, backup_configuration } }`
529
+ - **Logical CLI:** `gq ploi database-backups update-database-backup`
530
+ - **Source:** [Ploi API reference — Update database backup](https://developers.ploi.io/database/update-database-backup)
531
+
532
+ ## databases
533
+
534
+ ### Acknowledge database
535
+
536
+ - **Method/path:** `POST /api/servers/{server}/databases/acknowledge`
537
+ - **Path parameters:** `server`
538
+ - **Request:** body — `name (string; required)`; query — —
539
+ - **Pagination:** no documented pagination envelope
540
+ - **Response:** `{ data: { id, type, name, server_id, status, created_at } }`
541
+ - **Logical CLI:** `gq ploi databases acknowledge-database`
542
+ - **Source:** [Ploi API reference — Acknowledge database](https://developers.ploi.io/databases/acknowledge-database)
543
+
544
+ ### Create database
545
+
546
+ - **Method/path:** `POST /api/servers/{server}/databases`
547
+ - **Path parameters:** `server`
548
+ - **Request:** body — `name (string; required)`, `user (string; optional)`, `password (string; optional)`, `description (string; optional)`, `site_id (integer; optional)`; query — —
549
+ - **Pagination:** no documented pagination envelope
550
+ - **Response:** `{ data: { id, type, name, server_id, status, created_at } }`
551
+ - **Logical CLI:** `gq ploi databases create-database`
552
+ - **Source:** [Ploi API reference — Create database](https://developers.ploi.io/databases/create-database)
553
+
554
+ ### Delete database
555
+
556
+ - **Method/path:** `DELETE /api/servers/{server}/databases/{id}`
557
+ - **Path parameters:** `server`, `id`
558
+ - **Request:** body — —; query — —
559
+ - **Pagination:** no documented pagination envelope
560
+ - **Response:** `empty response body`; **notes:** documented empty response body; irreversible mutation
561
+ - **Logical CLI:** `gq ploi databases delete-database`
562
+ - **Source:** [Ploi API reference — Delete database](https://developers.ploi.io/databases/delete-database)
563
+
564
+ ### Duplicate database
565
+
566
+ - **Method/path:** `POST /api/servers/{server}/databases/{database}/duplicate`
567
+ - **Path parameters:** `server`, `database`
568
+ - **Request:** body — `name (string; required)`, `user (string; optional)`, `password (string; optional)`; query — —
569
+ - **Pagination:** no documented pagination envelope
570
+ - **Response:** `{ data: { id, type, name, server_id, status, created_at }, message }`
571
+ - **Logical CLI:** `gq ploi databases duplicate-database`
572
+ - **Source:** [Ploi API reference — Duplicate database](https://developers.ploi.io/databases/duplicate-database)
573
+
574
+ ### Forget database
575
+
576
+ - **Method/path:** `DELETE /api/servers/{server}/databases/{id}/forget`
577
+ - **Path parameters:** `server`, `id`
578
+ - **Request:** body — —; query — —
579
+ - **Pagination:** no documented pagination envelope
580
+ - **Response:** `empty response body`; **notes:** documented empty response body
581
+ - **Logical CLI:** `gq ploi databases forget-database`
582
+ - **Source:** [Ploi API reference — Forget database](https://developers.ploi.io/databases/forget-database)
583
+
584
+ ### Get database
585
+
586
+ - **Method/path:** `GET /api/servers/{server}/databases/{id}`
587
+ - **Path parameters:** `server`, `id`
588
+ - **Request:** body — —; query — —
589
+ - **Pagination:** no documented pagination envelope
590
+ - **Response:** `{ data: { id, type, name, server_id, status, created_at } }`; `{ data: { id, type, name, server_id, status, site, created_at } }`
591
+ - **Logical CLI:** `gq ploi database show`
592
+ - **Source:** [Ploi API reference — Get database](https://developers.ploi.io/databases/get-database)
593
+
594
+ ### List databases
595
+
596
+ - **Method/path:** `GET /api/servers/{server}/databases`
597
+ - **Path parameters:** `server`
598
+ - **Request:** body — —; query — —
599
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
600
+ - **Response:** `{ data: array of { id, type, name, server_id, status, created_at }, links, meta }`
601
+ - **Logical CLI:** `gq ploi databases list`
602
+ - **Source:** [Ploi API reference — List databases](https://developers.ploi.io/databases/list-databases)
603
+
604
+ ## deployments
605
+
606
+ ### Deploy site
607
+
608
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/deploy`
609
+ - **Path parameters:** `server`, `id`
610
+ - **Request:** body — `scheduled (datetime; optional)`, `variables (object; optional)`; query — —
611
+ - **Pagination:** no documented pagination envelope
612
+ - **Response:** `{ message }`
613
+ - **Logical CLI:** `gq ploi deployments deploy-site`
614
+ - **Source:** [Ploi API reference — Deploy site](https://developers.ploi.io/deployments/deploy-site)
615
+
616
+ ### Deploy staging site to production
617
+
618
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/deploy-to-production`
619
+ - **Path parameters:** `server`, `id`
620
+ - **Request:** body — —; query — —
621
+ - **Pagination:** no documented pagination envelope
622
+ - **Response:** `{ message }`
623
+ - **Logical CLI:** `gq ploi deployments deploy-staging-site-to-production`
624
+ - **Source:** [Ploi API reference — Deploy staging site to production](https://developers.ploi.io/deployments/deploy-staging-site-to-production)
625
+
626
+ ### Get deploy script
627
+
628
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/deploy/script`
629
+ - **Path parameters:** `server`, `id`
630
+ - **Request:** body — —; query — —
631
+ - **Pagination:** no documented pagination envelope
632
+ - **Response:** `{ deploy_script }`
633
+ - **Logical CLI:** `gq ploi deployments show-deploy-script`
634
+ - **Source:** [Ploi API reference — Get deploy script](https://developers.ploi.io/deployments/get-deploy-script)
635
+
636
+ ### Update deploy script
637
+
638
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{id}/deploy/script`
639
+ - **Path parameters:** `server`, `id`
640
+ - **Request:** body — `deploy_script (string; required)`; query — —
641
+ - **Pagination:** no documented pagination envelope
642
+ - **Response:** `{ message }`
643
+ - **Logical CLI:** `gq ploi deployments update-deploy-script`
644
+ - **Source:** [Ploi API reference — Update deploy script](https://developers.ploi.io/deployments/update-deploy-script)
645
+
646
+ ## environment
647
+
648
+ ### Get .env from site
649
+
650
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/env`
651
+ - **Path parameters:** `server`, `id`
652
+ - **Request:** body — —; query — —
653
+ - **Pagination:** no documented pagination envelope
654
+ - **Response:** `{ content }`
655
+ - **Logical CLI:** `gq ploi environment show-env-from-site`
656
+ - **Source:** [Ploi API reference — Get .env from site](https://developers.ploi.io/environment/get-env-from-site)
657
+
658
+ ### Update .env from site
659
+
660
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{id}/env`
661
+ - **Path parameters:** `server`, `id`
662
+ - **Request:** body — `content (string; required)`; query — —
663
+ - **Pagination:** no documented pagination envelope
664
+ - **Response:** `{ message }`
665
+ - **Logical CLI:** `gq ploi environment update-env-from-site`
666
+ - **Source:** [Ploi API reference — Update .env from site](https://developers.ploi.io/environment/update-env-from-site)
667
+
668
+ ## fastcgi-cache
669
+
670
+ ### Disable FastCGI cache
671
+
672
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{site}/fastcgi-cache/disable`
673
+ - **Path parameters:** `server`, `site`
674
+ - **Request:** body — —; query — —
675
+ - **Pagination:** no documented pagination envelope
676
+ - **Response:** `{ data: { id, status, server_id, domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, notification_urls, has_repository, zero_downtime_deployment, created_at } }`
677
+ - **Logical CLI:** `gq ploi fastcgi-cache disable-fastcgi-cache`
678
+ - **Source:** [Ploi API reference — Disable FastCGI cache](https://developers.ploi.io/fastcgi-cache/disable-fastcgi-cache)
679
+
680
+ ### Enable FastCGI cache
681
+
682
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/fastcgi-cache/enable`
683
+ - **Path parameters:** `server`, `site`
684
+ - **Request:** body — —; query — —
685
+ - **Pagination:** no documented pagination envelope
686
+ - **Response:** `{ data: { id, status, server_id, domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, notification_urls, has_repository, zero_downtime_deployment, created_at } }`
687
+ - **Logical CLI:** `gq ploi fastcgi-cache enable-fastcgi-cache`
688
+ - **Source:** [Ploi API reference — Enable FastCGI cache](https://developers.ploi.io/fastcgi-cache/enable-fastcgi-cache)
689
+
690
+ ### Flush FastCGI cache
691
+
692
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/fastcgi-cache/flush`
693
+ - **Path parameters:** `server`, `site`
694
+ - **Request:** body — —; query — —
695
+ - **Pagination:** no documented pagination envelope
696
+ - **Response:** `{ data: { id, status, server_id, domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, notification_urls, has_repository, zero_downtime_deployment, created_at } }`
697
+ - **Logical CLI:** `gq ploi fastcgi-cache flush-fastcgi-cache`
698
+ - **Source:** [Ploi API reference — Flush FastCGI cache](https://developers.ploi.io/fastcgi-cache/flush-fastcgi-cache)
699
+
700
+ ## insights
701
+
702
+ ### Automatically fix insight
703
+
704
+ - **Method/path:** `POST /api/servers/{server}/insights/{id}/automatically-fix`
705
+ - **Path parameters:** `server`, `id`
706
+ - **Request:** body — —; query — —
707
+ - **Pagination:** no documented pagination envelope
708
+ - **Response:** `{ data: { id, status, description, log_file, priority, meta, is_fixable, processed_at, created_at } }`; `{ message, errors, links }`
709
+ - **Logical CLI:** `gq ploi insights automatically-fix-insight`
710
+ - **Source:** [Ploi API reference — Automatically fix insight](https://developers.ploi.io/insights/automatically-fix-insight)
711
+
712
+ ### Delete insight
713
+
714
+ - **Method/path:** `DELETE /api/servers/{server}/insights/{id}`
715
+ - **Path parameters:** `server`, `id`
716
+ - **Request:** body — —; query — —
717
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
718
+ - **Response:** `{ data: array, links, meta }`; **notes:** DELETE response is documented with a pagination-shaped empty data envelope; pagination semantics are ambiguous
719
+ - **Logical CLI:** `gq ploi insights delete-insight`
720
+ - **Source:** [Ploi API reference — Delete insight](https://developers.ploi.io/insights/delete-insight)
721
+
722
+ ### Detail insight
723
+
724
+ - **Method/path:** `GET /api/servers/{server}/insights/{id}/detail`
725
+ - **Path parameters:** `server`, `id`
726
+ - **Request:** body — —; query — —
727
+ - **Pagination:** no documented pagination envelope
728
+ - **Response:** `{ data: { id, description, description_html, html } }`
729
+ - **Logical CLI:** `gq ploi insights detail-insight`
730
+ - **Source:** [Ploi API reference — Detail insight](https://developers.ploi.io/insights/detail-insight)
731
+
732
+ ### Get insight
733
+
734
+ - **Method/path:** `GET /api/servers/{server}/insights/{id}`
735
+ - **Path parameters:** `server`, `id`
736
+ - **Request:** body — —; query — —
737
+ - **Pagination:** no documented pagination envelope
738
+ - **Response:** `{ data: { id, type, status, description, log_file, priority, meta, is_fixable, processed_at, created_at } }`
739
+ - **Logical CLI:** `gq ploi insights show-insight`
740
+ - **Source:** [Ploi API reference — Get insight](https://developers.ploi.io/insights/get-insight)
741
+
742
+ ### Ignore insight
743
+
744
+ - **Method/path:** `POST /api/servers/{server}/insights/{id}/ignore`
745
+ - **Path parameters:** `server`, `id`
746
+ - **Request:** body — —; query — —
747
+ - **Pagination:** no documented pagination envelope
748
+ - **Response:** `{ data: { id, status, description, log_file, priority, meta, is_fixable, processed_at, created_at } }`
749
+ - **Logical CLI:** `gq ploi insights ignore-insight`
750
+ - **Source:** [Ploi API reference — Ignore insight](https://developers.ploi.io/insights/ignore-insight)
751
+
752
+ ### List insights
753
+
754
+ - **Method/path:** `GET /api/servers/{server}/insights`
755
+ - **Path parameters:** `server`
756
+ - **Request:** body — —; query — —
757
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
758
+ - **Response:** `{ data: array of { id, type, status, description, log_file, priority, meta, is_fixable, processed_at, created_at }, links, meta }`
759
+ - **Logical CLI:** `gq ploi insights list-insights`
760
+ - **Source:** [Ploi API reference — List insights](https://developers.ploi.io/insights/list-insights)
761
+
762
+ ## load-balancers
763
+
764
+ ### Attach server
765
+
766
+ - **Method/path:** `PATCH /api/servers/{server}/load-balancer/attach`
767
+ - **Path parameters:** `server`
768
+ - **Request:** body — `server_id (integer; required)`; query — —
769
+ - **Pagination:** no documented pagination envelope
770
+ - **Response:** `{ }`; **notes:** on-demand execution/retrieval is documented
771
+ - **Logical CLI:** `gq ploi load-balancers attach-server`
772
+ - **Source:** [Ploi API reference — Attach server](https://developers.ploi.io/load-balancers/attach-server)
773
+
774
+ ### Detach server
775
+
776
+ - **Method/path:** `PATCH /api/servers/{server}/load-balancer/detach`
777
+ - **Path parameters:** `server`
778
+ - **Request:** body — `server_id (integer; required)`; query — —
779
+ - **Pagination:** no documented pagination envelope
780
+ - **Response:** `{ }`; **notes:** on-demand execution/retrieval is documented
781
+ - **Logical CLI:** `gq ploi load-balancers detach-server`
782
+ - **Source:** [Ploi API reference — Detach server](https://developers.ploi.io/load-balancers/detach-server)
783
+
784
+ ### Request certificate for domain
785
+
786
+ - **Method/path:** `POST /api/servers/{server}/load-balancer/{domain}/request-certificate`
787
+ - **Path parameters:** `server`, `domain`
788
+ - **Request:** body — —; query — —
789
+ - **Pagination:** no documented pagination envelope
790
+ - **Response:** `{ message }`; **notes:** source example uses a concrete ID/domain; normalized here
791
+ - **Logical CLI:** `gq ploi load-balancers request-certificate-for-domain`
792
+ - **Source:** [Ploi API reference — Request certificate for domain](https://developers.ploi.io/load-balancers/request-certificate-for-domain)
793
+
794
+ ### Revoke certificate for domain
795
+
796
+ - **Method/path:** `DELETE /api/servers/{server}/load-balancer/{domain}/revoke-certificate`
797
+ - **Path parameters:** `server`, `domain`
798
+ - **Request:** body — —; query — —
799
+ - **Pagination:** no documented pagination envelope
800
+ - **Response:** `{ message }`; **notes:** source example uses a concrete ID/domain; normalized here
801
+ - **Logical CLI:** `gq ploi load-balancers revoke-certificate-for-domain`
802
+ - **Source:** [Ploi API reference — Revoke certificate for domain](https://developers.ploi.io/load-balancers/revoke-certificate-for-domain)
803
+
804
+ ## monitoring
805
+
806
+ ### Delete monitor
807
+
808
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{site}/monitors/{monitor}`
809
+ - **Path parameters:** `server`, `site`, `monitor`
810
+ - **Request:** body — —; query — —
811
+ - **Pagination:** no documented pagination envelope
812
+ - **Response:** `{ status, message }`
813
+ - **Logical CLI:** `gq ploi monitoring delete-monitor`
814
+ - **Source:** [Ploi API reference — Delete monitor](https://developers.ploi.io/monitoring/delete-monitor)
815
+
816
+ ### Get monitor
817
+
818
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/monitors/{monitor}`
819
+ - **Path parameters:** `server`, `site`, `monitor`
820
+ - **Request:** body — —; query — —
821
+ - **Pagination:** no documented pagination envelope
822
+ - **Response:** `{ data: { id, label, location, average_uptime, active, created_at } }`
823
+ - **Logical CLI:** `gq ploi monitoring show-monitor`
824
+ - **Source:** [Ploi API reference — Get monitor](https://developers.ploi.io/monitoring/get-monitor)
825
+
826
+ ### Get uptime responses
827
+
828
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/monitors/{monitor}/uptime-responses`
829
+ - **Path parameters:** `server`, `site`, `monitor`
830
+ - **Request:** body — —; query — —
831
+ - **Pagination:** no documented pagination envelope
832
+ - **Response:** `{ data: array of { response_time, created_at } }`
833
+ - **Logical CLI:** `gq ploi monitoring show-uptime-responses`
834
+ - **Source:** [Ploi API reference — Get uptime responses](https://developers.ploi.io/monitoring/get-uptime-responses)
835
+
836
+ ### List monitors
837
+
838
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/monitors`
839
+ - **Path parameters:** `server`, `site`
840
+ - **Request:** body — —; query — —
841
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
842
+ - **Response:** `{ data: array of { id, label, location, average_uptime, active, created_at }, links, meta }`
843
+ - **Logical CLI:** `gq ploi monitoring list-monitors`
844
+ - **Source:** [Ploi API reference — List monitors](https://developers.ploi.io/monitoring/list-monitors)
845
+
846
+ ## network-rules
847
+
848
+ ### Create network rule
849
+
850
+ - **Method/path:** `POST /api/servers/{server}/network-rules`
851
+ - **Path parameters:** `server`
852
+ - **Request:** body — `name (string; required)`, `port (string; required)`, `type (string; required)`, `rule_type (string; required)`, `from_ip_address (string; optional)`; query — —
853
+ - **Pagination:** no documented pagination envelope
854
+ - **Response:** `{ data: { id, name, port, from_ip_address, rule_type, status, created_at } }`
855
+ - **Logical CLI:** `gq ploi network-rules create-network-rule`
856
+ - **Source:** [Ploi API reference — Create network rule](https://developers.ploi.io/network-rules/create-network-rule)
857
+
858
+ ### Delete network rule
859
+
860
+ - **Method/path:** `DELETE /api/servers/{server}/network-rules/{id}`
861
+ - **Path parameters:** `server`, `id`
862
+ - **Request:** body — —; query — —
863
+ - **Pagination:** no documented pagination envelope
864
+ - **Response:** `empty response body`; **notes:** documented empty response body
865
+ - **Logical CLI:** `gq ploi network-rules delete-network-rule`
866
+ - **Source:** [Ploi API reference — Delete network rule](https://developers.ploi.io/network-rules/delete-network-rule)
867
+
868
+ ### Get network rule
869
+
870
+ - **Method/path:** `GET /api/servers/{server}/network-rules/{id}`
871
+ - **Path parameters:** `server`, `id`
872
+ - **Request:** body — —; query — —
873
+ - **Pagination:** no documented pagination envelope
874
+ - **Response:** `{ data: { id, name, port, from_ip_address, rule_type, status, created_at } }`
875
+ - **Logical CLI:** `gq ploi network-rules show-network-rule`
876
+ - **Source:** [Ploi API reference — Get network rule](https://developers.ploi.io/network-rules/get-network-rule)
877
+
878
+ ### List network rules
879
+
880
+ - **Method/path:** `GET /api/servers/{server}/network-rules`
881
+ - **Path parameters:** `server`
882
+ - **Request:** body — —; query — —
883
+ - **Pagination:** no documented pagination envelope
884
+ - **Response:** `{ data: array of { id, name, port, from_ip_address, rule_type, status, created_at } }`
885
+ - **Logical CLI:** `gq ploi network-rules list-network-rules`
886
+ - **Source:** [Ploi API reference — List network rules](https://developers.ploi.io/network-rules/list-network-rules)
887
+
888
+ ## php
889
+
890
+ ### Disable OPcache
891
+
892
+ - **Method/path:** `DELETE /api/servers/{server}/disable-opcache`
893
+ - **Path parameters:** `server`
894
+ - **Request:** body — —; query — —
895
+ - **Pagination:** no documented pagination envelope
896
+ - **Response:** `{ data: { id, status, type, name, ip_address, internal_ip, ssh_port, reboot_required, php_version, mysql_version, sites_count, monitoring, opcache, installed_php_versions, status_id, created_at } }`
897
+ - **Logical CLI:** `gq ploi php disable-opcache`
898
+ - **Source:** [Ploi API reference — Disable OPcache](https://developers.ploi.io/php/disable-opcache)
899
+
900
+ ### Enable OPcache
901
+
902
+ - **Method/path:** `POST /api/servers/{server}/enable-opcache`
903
+ - **Path parameters:** `server`
904
+ - **Request:** body — —; query — —
905
+ - **Pagination:** no documented pagination envelope
906
+ - **Response:** `{ data: { id, status, type, name, ip_address, internal_ip, ssh_port, reboot_required, php_version, mysql_version, sites_count, monitoring, opcache, installed_php_versions, status_id, created_at } }`
907
+ - **Logical CLI:** `gq ploi php enable-opcache`
908
+ - **Source:** [Ploi API reference — Enable OPcache](https://developers.ploi.io/php/enable-opcache)
909
+
910
+ ### Install PHP version
911
+
912
+ - **Method/path:** `POST /api/servers/{server}/php/install`
913
+ - **Path parameters:** `server`
914
+ - **Request:** body — `version (string; required)`; query — —
915
+ - **Pagination:** no documented pagination envelope
916
+ - **Response:** `{ status, message }`
917
+ - **Logical CLI:** `gq ploi php install-php-version`
918
+ - **Source:** [Ploi API reference — Install PHP version](https://developers.ploi.io/php/install-php-version)
919
+
920
+ ### Installed PHP versions
921
+
922
+ - **Method/path:** `GET /api/servers/{server}/php/versions`
923
+ - **Path parameters:** `server`
924
+ - **Request:** body — —; query — —
925
+ - **Pagination:** no documented pagination envelope
926
+ - **Response:** `{ data: { versions } }`
927
+ - **Logical CLI:** `gq ploi php installed-php-versions`
928
+ - **Source:** [Ploi API reference — Installed PHP versions](https://developers.ploi.io/php/installed-php-versions)
929
+
930
+ ### Refresh OPcache
931
+
932
+ - **Method/path:** `POST /api/servers/{server}/refresh-opcache`
933
+ - **Path parameters:** `server`
934
+ - **Request:** body — —; query — —
935
+ - **Pagination:** no documented pagination envelope
936
+ - **Response:** `{ data: { id, name, ip_address, php_version, mysql_version, sites_count, status, created_at } }`
937
+ - **Logical CLI:** `gq ploi php refresh-opcache`
938
+ - **Source:** [Ploi API reference — Refresh OPcache](https://developers.ploi.io/php/refresh-opcache)
939
+
940
+ ### Switch PHP CLI version
941
+
942
+ - **Method/path:** `POST /api/servers/{server}/php/cli-version`
943
+ - **Path parameters:** `server`
944
+ - **Request:** body — `version (string; required)`; query — —
945
+ - **Pagination:** no documented pagination envelope
946
+ - **Response:** `{ status, message }`; `{ message, errors, links }`; **notes:** on-demand execution/retrieval is documented
947
+ - **Logical CLI:** `gq ploi php switch-php-cli-version`
948
+ - **Source:** [Ploi API reference — Switch PHP CLI version](https://developers.ploi.io/php/switch-php-cli-version)
949
+
950
+ ## projects
951
+
952
+ ### Create project
953
+
954
+ - **Method/path:** `POST /api/projects`
955
+ - **Path parameters:** —
956
+ - **Request:** body — `title (string; required)`, `servers (array; optional)`, `sites (array; optional)`; query — —
957
+ - **Pagination:** no documented pagination envelope
958
+ - **Response:** `{ data: { id, title, servers, sites, created_at } }`
959
+ - **Logical CLI:** `gq ploi projects create-project`
960
+ - **Source:** [Ploi API reference — Create project](https://developers.ploi.io/projects/create-project)
961
+
962
+ ### Delete project
963
+
964
+ - **Method/path:** `DELETE /api/projects/{project}`
965
+ - **Path parameters:** `project`
966
+ - **Request:** body — —; query — —
967
+ - **Pagination:** no documented pagination envelope
968
+ - **Response:** `{ message }`
969
+ - **Logical CLI:** `gq ploi projects delete-project`
970
+ - **Source:** [Ploi API reference — Delete project](https://developers.ploi.io/projects/delete-project)
971
+
972
+ ### Get project
973
+
974
+ - **Method/path:** `GET /api/projects/{project}`
975
+ - **Path parameters:** `project`
976
+ - **Request:** body — —; query — —
977
+ - **Pagination:** no documented pagination envelope
978
+ - **Response:** `{ data: { id, title, servers, sites, created_at } }`
979
+ - **Logical CLI:** `gq ploi projects show-project`
980
+ - **Source:** [Ploi API reference — Get project](https://developers.ploi.io/projects/get-project)
981
+
982
+ ### List projects
983
+
984
+ - **Method/path:** `GET /api/projects`
985
+ - **Path parameters:** —
986
+ - **Request:** body — —; query — —
987
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
988
+ - **Response:** `{ data: array of { id, title, servers, sites, created_at }, links, meta }`
989
+ - **Logical CLI:** `gq ploi projects list-projects`
990
+ - **Source:** [Ploi API reference — List projects](https://developers.ploi.io/projects/list-projects)
991
+
992
+ ### Update project
993
+
994
+ - **Method/path:** `PATCH /api/projects/{project}`
995
+ - **Path parameters:** `project`
996
+ - **Request:** body — `title (string; required)`, `servers (array; optional)`, `sites (array; optional)`; query — —
997
+ - **Pagination:** no documented pagination envelope
998
+ - **Response:** `{ data: { id, title, servers, sites, created_at } }`
999
+ - **Logical CLI:** `gq ploi projects update-project`
1000
+ - **Source:** [Ploi API reference — Update project](https://developers.ploi.io/projects/update-project)
1001
+
1002
+ ## queue-workers
1003
+
1004
+ ### Create queue worker
1005
+
1006
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/queues`
1007
+ - **Path parameters:** `server`, `id`
1008
+ - **Request:** body — `connection (string; required)`, `queue (string; required)`, `maximum_seconds (integer; required)`, `sleep (integer; required)`, `processes (integer; required)`, `backoff (integer; required)`, `maximum_tries (integer; optional)`; query — —
1009
+ - **Pagination:** no documented pagination envelope
1010
+ - **Response:** `{ data: { id, connection, queue, maximum_seconds, maximum_tries, enviroment, sleep, processes, backoff, status, site_id, server_id } }`; **notes:** operation may be queued/backgrounded
1011
+ - **Logical CLI:** `gq ploi queue-workers create-queue-worker`
1012
+ - **Source:** [Ploi API reference — Create queue worker](https://developers.ploi.io/queue-workers/create-queue-worker)
1013
+
1014
+ ### Delete queue worker
1015
+
1016
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/queues/{queueId}`
1017
+ - **Path parameters:** `server`, `id`, `queueId`
1018
+ - **Request:** body — —; query — —
1019
+ - **Pagination:** no documented pagination envelope
1020
+ - **Response:** `{ message }`; **notes:** operation may be queued/backgrounded
1021
+ - **Logical CLI:** `gq ploi queue-workers delete-queue-worker`
1022
+ - **Source:** [Ploi API reference — Delete queue worker](https://developers.ploi.io/queue-workers/delete-queue-worker)
1023
+
1024
+ ### Get queue worker
1025
+
1026
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/queues/{queueId}`
1027
+ - **Path parameters:** `server`, `id`, `queueId`
1028
+ - **Request:** body — —; query — —
1029
+ - **Pagination:** no documented pagination envelope
1030
+ - **Response:** `{ data: { id, connection, queue, maximum_seconds, maximum_tries, enviroment, sleep, processes, backoff, status, site_id, server_id } }`; **notes:** operation may be queued/backgrounded
1031
+ - **Logical CLI:** `gq ploi queue-workers show-queue-worker`
1032
+ - **Source:** [Ploi API reference — Get queue worker](https://developers.ploi.io/queue-workers/get-queue-worker)
1033
+
1034
+ ### List queue workers
1035
+
1036
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/queues`
1037
+ - **Path parameters:** `server`, `id`
1038
+ - **Request:** body — —; query — —
1039
+ - **Pagination:** no documented pagination envelope
1040
+ - **Response:** `{ data: array of { id, connection, queue, maximum_seconds, maximum_tries, enviroment, sleep, processes, backoff, status, site_id, server_id } }`; **notes:** operation may be queued/backgrounded
1041
+ - **Logical CLI:** `gq ploi queue-workers list-queue-workers`
1042
+ - **Source:** [Ploi API reference — List queue workers](https://developers.ploi.io/queue-workers/list-queue-workers)
1043
+
1044
+ ### Pause queue worker
1045
+
1046
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/queues/{queueId}/toggle-pause`
1047
+ - **Path parameters:** `server`, `id`, `queueId`
1048
+ - **Request:** body — —; query — —
1049
+ - **Pagination:** no documented pagination envelope
1050
+ - **Response:** `{ data: { id, connection, queue, processes, status } }`; **notes:** operation may be queued/backgrounded
1051
+ - **Logical CLI:** `gq ploi queue-workers pause-queue-worker`
1052
+ - **Source:** [Ploi API reference — Pause queue worker](https://developers.ploi.io/queue-workers/pause-queue-worker)
1053
+
1054
+ ### Restart queue worker
1055
+
1056
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/queues/{queueId}/restart`
1057
+ - **Path parameters:** `server`, `id`, `queueId`
1058
+ - **Request:** body — —; query — —
1059
+ - **Pagination:** no documented pagination envelope
1060
+ - **Response:** `{ message }`; **notes:** operation may be queued/backgrounded
1061
+ - **Logical CLI:** `gq ploi queue-workers restart-queue-worker`
1062
+ - **Source:** [Ploi API reference — Restart queue worker](https://developers.ploi.io/queue-workers/restart-queue-worker)
1063
+
1064
+ ## redirects
1065
+
1066
+ ### Create redirect
1067
+
1068
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/redirects`
1069
+ - **Path parameters:** `server`, `site`
1070
+ - **Request:** body — `redirect_from (string; required)`, `redirect_to (string; required)`, `type (string; required)`; query — —
1071
+ - **Pagination:** no documented pagination envelope
1072
+ - **Response:** `{ data: { id, status, redirect_from, redirect_to, type } }`
1073
+ - **Logical CLI:** `gq ploi redirects create-redirect`
1074
+ - **Source:** [Ploi API reference — Create redirect](https://developers.ploi.io/redirects/create-redirect)
1075
+
1076
+ ### Delete redirect
1077
+
1078
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{site}/redirects/{redirect}`
1079
+ - **Path parameters:** `server`, `site`, `redirect`
1080
+ - **Request:** body — —; query — —
1081
+ - **Pagination:** no documented pagination envelope
1082
+ - **Response:** `{ message }`
1083
+ - **Logical CLI:** `gq ploi redirects delete-redirect`
1084
+ - **Source:** [Ploi API reference — Delete redirect](https://developers.ploi.io/redirects/delete-redirect)
1085
+
1086
+ ### Get redirect
1087
+
1088
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/redirects/{redirect}`
1089
+ - **Path parameters:** `server`, `site`, `redirect`
1090
+ - **Request:** body — —; query — —
1091
+ - **Pagination:** no documented pagination envelope
1092
+ - **Response:** `{ data: { id, status, redirect_from, redirect_to, type } }`
1093
+ - **Logical CLI:** `gq ploi redirects show-redirect`
1094
+ - **Source:** [Ploi API reference — Get redirect](https://developers.ploi.io/redirects/get-redirect)
1095
+
1096
+ ### List redirects
1097
+
1098
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/redirects`
1099
+ - **Path parameters:** `server`, `site`
1100
+ - **Request:** body — —; query — —
1101
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1102
+ - **Response:** `{ data: array of { id, status, redirect_from, redirect_to, type }, links, meta }`
1103
+ - **Logical CLI:** `gq ploi redirects list-redirects`
1104
+ - **Source:** [Ploi API reference — List redirects](https://developers.ploi.io/redirects/list-redirects)
1105
+
1106
+ ## repositories
1107
+
1108
+ ### Custom deployment
1109
+
1110
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/repository/custom-deployments`
1111
+ - **Path parameters:** `server`, `site`
1112
+ - **Request:** body — `script (string; optional)`; query — —
1113
+ - **Pagination:** no documented pagination envelope
1114
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, created_at, repository } }`
1115
+ - **Logical CLI:** `gq ploi repositories custom-deployment`
1116
+ - **Source:** [Ploi API reference — Custom deployment](https://developers.ploi.io/repositories/custom-deployment)
1117
+
1118
+ ### Delete repository
1119
+
1120
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{site}/repository`
1121
+ - **Path parameters:** `server`, `site`
1122
+ - **Request:** body — —; query — —
1123
+ - **Pagination:** no documented pagination envelope
1124
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, created_at } }`
1125
+ - **Logical CLI:** `gq ploi repositories delete-repository`
1126
+ - **Source:** [Ploi API reference — Delete repository](https://developers.ploi.io/repositories/delete-repository)
1127
+
1128
+ ### Get repository
1129
+
1130
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/repository`
1131
+ - **Path parameters:** `server`, `site`
1132
+ - **Request:** body — —; query — —
1133
+ - **Pagination:** no documented pagination envelope
1134
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, quick_deploy, created_at, repository } }`
1135
+ - **Logical CLI:** `gq ploi repositories show-repository`
1136
+ - **Source:** [Ploi API reference — Get repository](https://developers.ploi.io/repositories/get-repository)
1137
+
1138
+ ### Install repository
1139
+
1140
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/repository`
1141
+ - **Path parameters:** `server`, `site`
1142
+ - **Request:** body — `provider (string; required)`, `branch (string; required)`, `name (string; required)`, `source_provider_id (integer; optional)`, `install_composer (boolean; optional)`; query — —
1143
+ - **Pagination:** no documented pagination envelope
1144
+ - **Response:** `{ data: { id, domain, web_directory, wordpress, laravel, project_root, last_deploy_at, created_at, repository } }`
1145
+ - **Logical CLI:** `gq ploi repositories install-repository`
1146
+ - **Source:** [Ploi API reference — Install repository](https://developers.ploi.io/repositories/install-repository)
1147
+
1148
+ ### Toggle quick deploy
1149
+
1150
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/repository/quick-deploy`
1151
+ - **Path parameters:** `server`, `site`
1152
+ - **Request:** body — —; query — —
1153
+ - **Pagination:** no documented pagination envelope
1154
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, has_repository, zero_downtime_deployment, fastcgi_cache, created_at }, message }`
1155
+ - **Logical CLI:** `gq ploi repositories toggle-quick-deploy`
1156
+ - **Source:** [Ploi API reference — Toggle quick deploy](https://developers.ploi.io/repositories/toggle-quick-deploy)
1157
+
1158
+ ## script-actions
1159
+
1160
+ ### Create action
1161
+
1162
+ - **Method/path:** `POST /api/scripts/{script}/actions`
1163
+ - **Path parameters:** `script`
1164
+ - **Request:** body — `trigger (string; required)`, `servers (array; required)`, `delay_seconds (integer; optional)`; query — —
1165
+ - **Pagination:** no documented pagination envelope
1166
+ - **Response:** `{ data: { id, script_id, trigger, trigger_label, delay_seconds, is_paused, last_triggered_at, servers, created_at, updated_at } }`; **notes:** operation may be queued/backgrounded
1167
+ - **Logical CLI:** `gq ploi script-actions create-action`
1168
+ - **Source:** [Ploi API reference — Create action](https://developers.ploi.io/script-actions/create-action)
1169
+
1170
+ ### Delete action
1171
+
1172
+ - **Method/path:** `DELETE /api/scripts/{script}/actions/{action}`
1173
+ - **Path parameters:** `script`, `action`
1174
+ - **Request:** body — —; query — —
1175
+ - **Pagination:** no documented pagination envelope
1176
+ - **Response:** `{ status, message }`
1177
+ - **Logical CLI:** `gq ploi script-actions delete-action`
1178
+ - **Source:** [Ploi API reference — Delete action](https://developers.ploi.io/script-actions/delete-action)
1179
+
1180
+ ### Get action
1181
+
1182
+ - **Method/path:** `GET /api/scripts/{script}/actions/{action}`
1183
+ - **Path parameters:** `script`, `action`
1184
+ - **Request:** body — —; query — —
1185
+ - **Pagination:** no documented pagination envelope
1186
+ - **Response:** `{ data: { id, script_id, trigger, trigger_label, delay_seconds, is_paused, last_triggered_at, servers, created_at, updated_at } }`
1187
+ - **Logical CLI:** `gq ploi script-actions show-action`
1188
+ - **Source:** [Ploi API reference — Get action](https://developers.ploi.io/script-actions/get-action)
1189
+
1190
+ ### List actions
1191
+
1192
+ - **Method/path:** `GET /api/scripts/{script}/actions`
1193
+ - **Path parameters:** `script`
1194
+ - **Request:** body — —; query — —
1195
+ - **Pagination:** no documented pagination envelope
1196
+ - **Response:** `{ data: array of { id, script_id, trigger, trigger_label, delay_seconds, is_paused, last_triggered_at, servers, created_at, updated_at } }`
1197
+ - **Logical CLI:** `gq ploi script-actions list-actions`
1198
+ - **Source:** [Ploi API reference — List actions](https://developers.ploi.io/script-actions/list-actions)
1199
+
1200
+ ### Rotate webhook secret
1201
+
1202
+ - **Method/path:** `POST /api/scripts/{script}/actions/{action}/rotate-secret`
1203
+ - **Path parameters:** `script`, `action`
1204
+ - **Request:** body — —; query — —
1205
+ - **Pagination:** no documented pagination envelope
1206
+ - **Response:** `{ data: { id, script_id, trigger, trigger_label, delay_seconds, is_paused, last_triggered_at, servers, created_at, updated_at } }`
1207
+ - **Logical CLI:** `gq ploi script-actions rotate-action-secret`
1208
+ - **Source:** [Ploi API reference — Rotate webhook secret](https://developers.ploi.io/script-actions/rotate-action-secret)
1209
+
1210
+ ### Toggle action
1211
+
1212
+ - **Method/path:** `POST /api/scripts/{script}/actions/{action}/toggle`
1213
+ - **Path parameters:** `script`, `action`
1214
+ - **Request:** body — —; query — —
1215
+ - **Pagination:** no documented pagination envelope
1216
+ - **Response:** `{ data: { id, script_id, trigger, trigger_label, delay_seconds, is_paused, last_triggered_at, servers, created_at, updated_at } }`
1217
+ - **Logical CLI:** `gq ploi script-actions toggle-action`
1218
+ - **Source:** [Ploi API reference — Toggle action](https://developers.ploi.io/script-actions/toggle-action)
1219
+
1220
+ ### Update action
1221
+
1222
+ - **Method/path:** `PATCH /api/scripts/{script}/actions/{action}`
1223
+ - **Path parameters:** `script`, `action`
1224
+ - **Request:** body — `trigger (string; required)`, `servers (array; required)`, `delay_seconds (integer; optional)`; query — —
1225
+ - **Pagination:** no documented pagination envelope
1226
+ - **Response:** `{ data: { id, script_id, trigger, trigger_label, delay_seconds, is_paused, last_triggered_at, servers, created_at, updated_at } }`; **notes:** operation may be queued/backgrounded
1227
+ - **Logical CLI:** `gq ploi script-actions update-action`
1228
+ - **Source:** [Ploi API reference — Update action](https://developers.ploi.io/script-actions/update-action)
1229
+
1230
+ ## script-schedules
1231
+
1232
+ ### Create schedule
1233
+
1234
+ - **Method/path:** `POST /api/scripts/{script}/schedules`
1235
+ - **Path parameters:** `script`
1236
+ - **Request:** body — `cron_expression (string; required)`, `servers (array; required)`; query — —
1237
+ - **Pagination:** no documented pagination envelope
1238
+ - **Response:** `{ data: { id, script_id, cron_expression, servers, is_paused, next_run_at, last_run_at, created_at, updated_at } }`
1239
+ - **Logical CLI:** `gq ploi script-schedules create-schedule`
1240
+ - **Source:** [Ploi API reference — Create schedule](https://developers.ploi.io/script-schedules/create-schedule)
1241
+
1242
+ ### Delete schedule
1243
+
1244
+ - **Method/path:** `DELETE /api/scripts/{script}/schedules/{schedule}`
1245
+ - **Path parameters:** `script`, `schedule`
1246
+ - **Request:** body — —; query — —
1247
+ - **Pagination:** no documented pagination envelope
1248
+ - **Response:** `{ status, message }`
1249
+ - **Logical CLI:** `gq ploi script-schedules delete-schedule`
1250
+ - **Source:** [Ploi API reference — Delete schedule](https://developers.ploi.io/script-schedules/delete-schedule)
1251
+
1252
+ ### Get schedule
1253
+
1254
+ - **Method/path:** `GET /api/scripts/{script}/schedules/{schedule}`
1255
+ - **Path parameters:** `script`, `schedule`
1256
+ - **Request:** body — —; query — —
1257
+ - **Pagination:** no documented pagination envelope
1258
+ - **Response:** `{ data: { id, script_id, cron_expression, servers, is_paused, next_run_at, last_run_at, created_at, updated_at } }`
1259
+ - **Logical CLI:** `gq ploi script-schedules show-schedule`
1260
+ - **Source:** [Ploi API reference — Get schedule](https://developers.ploi.io/script-schedules/get-schedule)
1261
+
1262
+ ### List schedules
1263
+
1264
+ - **Method/path:** `GET /api/scripts/{script}/schedules`
1265
+ - **Path parameters:** `script`
1266
+ - **Request:** body — —; query — —
1267
+ - **Pagination:** no documented pagination envelope
1268
+ - **Response:** `{ data: array of { id, script_id, cron_expression, servers, is_paused, next_run_at, last_run_at, created_at, updated_at } }`
1269
+ - **Logical CLI:** `gq ploi script-schedules list-schedules`
1270
+ - **Source:** [Ploi API reference — List schedules](https://developers.ploi.io/script-schedules/list-schedules)
1271
+
1272
+ ### Toggle schedule
1273
+
1274
+ - **Method/path:** `POST /api/scripts/{script}/schedules/{schedule}/toggle`
1275
+ - **Path parameters:** `script`, `schedule`
1276
+ - **Request:** body — —; query — —
1277
+ - **Pagination:** no documented pagination envelope
1278
+ - **Response:** `{ data: { id, script_id, cron_expression, servers, is_paused, next_run_at, last_run_at, created_at, updated_at } }`
1279
+ - **Logical CLI:** `gq ploi script-schedules toggle-schedule`
1280
+ - **Source:** [Ploi API reference — Toggle schedule](https://developers.ploi.io/script-schedules/toggle-schedule)
1281
+
1282
+ ### Update schedule
1283
+
1284
+ - **Method/path:** `PATCH /api/scripts/{script}/schedules/{schedule}`
1285
+ - **Path parameters:** `script`, `schedule`
1286
+ - **Request:** body — `cron_expression (string; required)`, `servers (array; required)`; query — —
1287
+ - **Pagination:** no documented pagination envelope
1288
+ - **Response:** `{ data: { id, script_id, cron_expression, servers, is_paused, next_run_at, last_run_at, created_at, updated_at } }`
1289
+ - **Logical CLI:** `gq ploi script-schedules update-schedule`
1290
+ - **Source:** [Ploi API reference — Update schedule](https://developers.ploi.io/script-schedules/update-schedule)
1291
+
1292
+ ## scripts
1293
+
1294
+ ### Create script
1295
+
1296
+ - **Method/path:** `POST /api/scripts`
1297
+ - **Path parameters:** —
1298
+ - **Request:** body — `label (string; required)`, `user (string; required)`, `content (string; required)`; query — —
1299
+ - **Pagination:** no documented pagination envelope
1300
+ - **Response:** `{ data: { id, user, label, content, created_at } }`
1301
+ - **Logical CLI:** `gq ploi scripts create-script`
1302
+ - **Source:** [Ploi API reference — Create script](https://developers.ploi.io/scripts/create-script)
1303
+
1304
+ ### Delete script
1305
+
1306
+ - **Method/path:** `DELETE /api/scripts/{script}`
1307
+ - **Path parameters:** `script`
1308
+ - **Request:** body — —; query — —
1309
+ - **Pagination:** no documented pagination envelope
1310
+ - **Response:** `{ message }`
1311
+ - **Logical CLI:** `gq ploi scripts delete-script`
1312
+ - **Source:** [Ploi API reference — Delete script](https://developers.ploi.io/scripts/delete-script)
1313
+
1314
+ ### Get script execution
1315
+
1316
+ - **Method/path:** `GET /api/servers/{server}/scripts/run/{execution}`
1317
+ - **Path parameters:** `server`, `execution`
1318
+ - **Request:** body — —; query — —
1319
+ - **Pagination:** no documented pagination envelope
1320
+ - **Response:** `{ data: { id, server_id, user, content, status, exit_code, output, created_at, started_at, finished_at } }`; **notes:** 404 behavior documented
1321
+ - **Logical CLI:** `gq ploi scripts show-script-execution`
1322
+ - **Source:** [Ploi API reference — Get script execution](https://developers.ploi.io/scripts/get-script-execution)
1323
+
1324
+ ### Get script
1325
+
1326
+ - **Method/path:** `GET /api/scripts/{script}`
1327
+ - **Path parameters:** `script`
1328
+ - **Request:** body — —; query — —
1329
+ - **Pagination:** no documented pagination envelope
1330
+ - **Response:** `{ data: { id, user, label, content, created_at } }`
1331
+ - **Logical CLI:** `gq ploi scripts show-script`
1332
+ - **Source:** [Ploi API reference — Get script](https://developers.ploi.io/scripts/get-script)
1333
+
1334
+ ### List scripts
1335
+
1336
+ - **Method/path:** `GET /api/scripts`
1337
+ - **Path parameters:** —
1338
+ - **Request:** body — —; query — —
1339
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1340
+ - **Response:** `{ data: array of { id, user, label, content, created_at }, links, meta }`
1341
+ - **Logical CLI:** `gq ploi scripts list-scripts`
1342
+ - **Source:** [Ploi API reference — List scripts](https://developers.ploi.io/scripts/list-scripts)
1343
+
1344
+ ### Run one-off script
1345
+
1346
+ - **Method/path:** `POST /api/servers/{server}/scripts/run`
1347
+ - **Path parameters:** `server`
1348
+ - **Request:** body — `content (string; required)`, `user (string; optional)`; query — —
1349
+ - **Pagination:** no documented pagination envelope
1350
+ - **Response:** `{ data: { id, server_id, user, content, status, exit_code, output, created_at, started_at, finished_at } }`
1351
+ - **Logical CLI:** `gq ploi scripts run-one-off-script`
1352
+ - **Source:** [Ploi API reference — Run one-off script](https://developers.ploi.io/scripts/run-one-off-script)
1353
+
1354
+ ### Run script
1355
+
1356
+ - **Method/path:** `POST /api/scripts/{script}/run`
1357
+ - **Path parameters:** `script`
1358
+ - **Request:** body — `servers (array; required)`; query — —
1359
+ - **Pagination:** no documented pagination envelope
1360
+ - **Response:** `{ data: { running_on_servers } }`
1361
+ - **Logical CLI:** `gq ploi scripts run-script`
1362
+ - **Source:** [Ploi API reference — Run script](https://developers.ploi.io/scripts/run-script)
1363
+
1364
+ ### Update script
1365
+
1366
+ - **Method/path:** `PATCH /api/scripts/{script}`
1367
+ - **Path parameters:** `script`
1368
+ - **Request:** body — `label (string; optional)`, `user (string; optional)`, `content (string; optional)`; query — —
1369
+ - **Pagination:** no documented pagination envelope
1370
+ - **Response:** `{ data: { id, user, label, content, created_at } }`
1371
+ - **Logical CLI:** `gq ploi scripts update-script`
1372
+ - **Source:** [Ploi API reference — Update script](https://developers.ploi.io/scripts/update-script)
1373
+
1374
+ ## servers
1375
+
1376
+ ### Create custom server
1377
+
1378
+ - **Method/path:** `POST /api/servers/custom`
1379
+ - **Path parameters:** —
1380
+ - **Request:** body — `type (string; required)`, `ip (string; required)`, `ssh_port (integer; required)`, `database_type (string; required)`, `php_version (string; required)`, `name (string; optional)`, `os_type (string; optional)`, `description (string; optional)`, `install_monitoring (boolean; optional)`, `webhook_url (url; optional)`; query — —
1381
+ - **Pagination:** no documented pagination envelope
1382
+ - **Response:** `{ id, name, public_key, ssh_command, start_installation_url, message }`; `{ message }`
1383
+ - **Logical CLI:** `gq ploi servers create-custom-server`
1384
+ - **Source:** [Ploi API reference — Create custom server](https://developers.ploi.io/servers/create-custom-server)
1385
+
1386
+ ### Create custom server
1387
+
1388
+ - **Method/path:** `POST /api/servers/custom/{id}/start`
1389
+ - **Path parameters:** `id`
1390
+ - **Request:** body — `type (string; required)`, `ip (string; required)`, `ssh_port (integer; required)`, `database_type (string; required)`, `php_version (string; required)`, `name (string; optional)`, `os_type (string; optional)`, `description (string; optional)`, `install_monitoring (boolean; optional)`, `webhook_url (url; optional)`; query — —
1391
+ - **Pagination:** no documented pagination envelope
1392
+ - **Response:** `{ id, name, public_key, ssh_command, start_installation_url, message }`; `{ message }`
1393
+ - **Logical CLI:** `gq ploi servers start-installation`
1394
+ - **Source:** [Ploi API reference — Create custom server](https://developers.ploi.io/servers/create-custom-server)
1395
+
1396
+ ### Create server
1397
+
1398
+ - **Method/path:** `POST /api/servers`
1399
+ - **Path parameters:** —
1400
+ - **Request:** body — `plan (string; required)`, `region (string; required)`, `credential (integer; required)`, `type (string; required)`, `database_type (string; required)`, `webserver_type (string; required)`, `php_version (string; required)`, `name (string; optional)`, `os_type (string; optional)`, `description (string; optional)`, `install_monitoring (boolean; optional)`, `ip_type (string; optional)`, `webhook_url (url; optional)`; query — —
1401
+ - **Pagination:** no documented pagination envelope
1402
+ - **Response:** `{ data: { id, status, type, name, ip_address, php_version, mysql_version, sites_count, monitoring, status_id, created_at } }`; `{ message, server }`
1403
+ - **Logical CLI:** `gq ploi servers create-server`
1404
+ - **Source:** [Ploi API reference — Create server](https://developers.ploi.io/servers/create-server)
1405
+
1406
+ ### Delete server
1407
+
1408
+ - **Method/path:** `DELETE /api/servers/{server}`
1409
+ - **Path parameters:** `server`
1410
+ - **Request:** body — —; query — —
1411
+ - **Pagination:** no documented pagination envelope
1412
+ - **Response:** `{ data: { id, status, type, name, ip_address, php_version, mysql_version, sites_count, monitoring, created_at } }`; `{ message, errors, links }`; **notes:** irreversible mutation
1413
+ - **Logical CLI:** `gq ploi servers delete-server`
1414
+ - **Source:** [Ploi API reference — Delete server](https://developers.ploi.io/servers/delete-server)
1415
+
1416
+ ### Get server
1417
+
1418
+ - **Method/path:** `GET /api/servers/{id}`
1419
+ - **Path parameters:** `id`
1420
+ - **Request:** body — —; query — —
1421
+ - **Pagination:** no documented pagination envelope
1422
+ - **Response:** `{ data: { id, status, type, name, ip_address, php_version, mysql_version, sites_count, monitoring, created_at } }`
1423
+ - **Logical CLI:** `gq ploi server show`
1424
+ - **Source:** [Ploi API reference — Get server](https://developers.ploi.io/servers/get-server)
1425
+
1426
+ ### List servers
1427
+
1428
+ - **Method/path:** `GET /api/servers`
1429
+ - **Path parameters:** —
1430
+ - **Request:** body — —; query — —
1431
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1432
+ - **Response:** `{ data: array of { id, type, name, ip_address, php_version, mysql_version, sites_count, status, status_id, created_at }, links, meta }`
1433
+ - **Logical CLI:** `gq ploi servers list`
1434
+ - **Source:** [Ploi API reference — List servers](https://developers.ploi.io/servers/list-servers)
1435
+
1436
+ ### Server logs
1437
+
1438
+ - **Method/path:** `GET /api/servers/{id}/logs`
1439
+ - **Path parameters:** `id`
1440
+ - **Request:** body — —; query — —
1441
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1442
+ - **Response:** `{ data: array of { description, content, site_id, server_id, created_at }, links, meta }`
1443
+ - **Logical CLI:** `gq ploi servers logs-server`
1444
+ - **Source:** [Ploi API reference — Server logs](https://developers.ploi.io/servers/logs-server)
1445
+
1446
+ ### Monitored servers
1447
+
1448
+ - **Method/path:** `GET /api/servers/monitored`
1449
+ - **Path parameters:** —
1450
+ - **Request:** body — —; query — —
1451
+ - **Pagination:** no documented pagination envelope
1452
+ - **Response:** `{ data: array of { id, name, ip, url, statistics } }`
1453
+ - **Logical CLI:** `gq ploi servers monitored`
1454
+ - **Source:** [Ploi API reference — Monitored servers](https://developers.ploi.io/servers/monitored)
1455
+
1456
+ ### Server monitoring
1457
+
1458
+ - **Method/path:** `GET /api/servers/{server}/monitor`
1459
+ - **Path parameters:** `server`
1460
+ - **Request:** body — —; query — —
1461
+ - **Pagination:** no documented pagination envelope
1462
+ - **Response:** `{ data: array of { cpu, ram, disk, load_average, date } }`; `{ message, errors, links }`
1463
+ - **Logical CLI:** `gq ploi servers monitoring`
1464
+ - **Source:** [Ploi API reference — Server monitoring](https://developers.ploi.io/servers/monitoring)
1465
+
1466
+ ### Restart server
1467
+
1468
+ - **Method/path:** `POST /api/servers/{id}/restart`
1469
+ - **Path parameters:** `id`
1470
+ - **Request:** body — —; query — —
1471
+ - **Pagination:** no documented pagination envelope
1472
+ - **Response:** `{ message }`
1473
+ - **Logical CLI:** `gq ploi servers restart-server`
1474
+ - **Source:** [Ploi API reference — Restart server](https://developers.ploi.io/servers/restart-server)
1475
+
1476
+ ### Update server
1477
+
1478
+ - **Method/path:** `PATCH /api/servers/{server}`
1479
+ - **Path parameters:** `server`
1480
+ - **Request:** body — `name (string; required)`, `ip (string; optional)`, `ssh_port (integer; optional)`; query — —
1481
+ - **Pagination:** no documented pagination envelope
1482
+ - **Response:** `{ data: { id, status, type, database_type, name, ip_address, internal_ip, ssh_port, reboot_required, php_version, php_cli_version, mysql_version, sites_count, monitoring, opcache, installed_php_versions, updates, description, status_id, provider, created_at, created_human, uptime_human } }`
1483
+ - **Logical CLI:** `gq ploi servers update-server`
1484
+ - **Source:** [Ploi API reference — Update server](https://developers.ploi.io/servers/update-server)
1485
+
1486
+ ## services
1487
+
1488
+ ### Install WordPress CLI
1489
+
1490
+ - **Method/path:** `POST /api/servers/{server}/install/wp-cli`
1491
+ - **Path parameters:** `server`
1492
+ - **Request:** body — —; query — —
1493
+ - **Pagination:** no documented pagination envelope
1494
+ - **Response:** `{ status, message }`
1495
+ - **Logical CLI:** `gq ploi services install-wordpress-cli`
1496
+ - **Source:** [Ploi API reference — Install WordPress CLI](https://developers.ploi.io/services/install-wordpress-cli)
1497
+
1498
+ ### Reload service
1499
+
1500
+ - **Method/path:** `POST /api/servers/{server}/services/{service}/reload`
1501
+ - **Path parameters:** `server`, `service`
1502
+ - **Request:** body — —; query — —
1503
+ - **Pagination:** no documented pagination envelope
1504
+ - **Response:** `{ message, fallback }`; **notes:** 422 behavior documented
1505
+ - **Logical CLI:** `gq ploi services reload-service`
1506
+ - **Source:** [Ploi API reference — Reload service](https://developers.ploi.io/services/reload-service)
1507
+
1508
+ ### Restart service
1509
+
1510
+ - **Method/path:** `POST /api/servers/{server}/services/{service}/restart`
1511
+ - **Path parameters:** `server`, `service`
1512
+ - **Request:** body — —; query — —
1513
+ - **Pagination:** no documented pagination envelope
1514
+ - **Response:** `{ status, message }`
1515
+ - **Logical CLI:** `gq ploi services restart-service`
1516
+ - **Source:** [Ploi API reference — Restart service](https://developers.ploi.io/services/restart-service)
1517
+
1518
+ ### Run WP CLI command
1519
+
1520
+ - **Method/path:** `POST /api/servers/{server}/wp-cli/run`
1521
+ - **Path parameters:** `server`
1522
+ - **Request:** body — `command (string; required)`; query — —
1523
+ - **Pagination:** no documented pagination envelope
1524
+ - **Response:** `{ status, message }`; **notes:** on-demand execution/retrieval is documented
1525
+ - **Logical CLI:** `gq ploi services run-wp-cli-command`
1526
+ - **Source:** [Ploi API reference — Run WP CLI command](https://developers.ploi.io/services/run-wp-cli-command)
1527
+
1528
+ ### Uninstall WordPress CLI
1529
+
1530
+ - **Method/path:** `DELETE /api/servers/{server}/uninstall/wp-cli`
1531
+ - **Path parameters:** `server`
1532
+ - **Request:** body — —; query — —
1533
+ - **Pagination:** no documented pagination envelope
1534
+ - **Response:** `{ status, message }`
1535
+ - **Logical CLI:** `gq ploi services uninstall-wordpress-cli`
1536
+ - **Source:** [Ploi API reference — Uninstall WordPress CLI](https://developers.ploi.io/services/uninstall-wordpress-cli)
1537
+
1538
+ ## site
1539
+
1540
+ ### Create site file backup
1541
+
1542
+ - **Method/path:** `POST /api/backups/file`
1543
+ - **Path parameters:** —
1544
+ - **Request:** body — `backup_configuration (integer; required)`, `server (integer; required)`, `sites (array; required)`, `interval (integer; required)`, `path (object; required)`, `locations (string; optional)`, `keep_backup_amount (integer; optional)`, `custom_name (string; optional)`, `local_path (string; optional)`, `password (string; optional)`, `next_backup_at (string; optional)`, `deleteOnFail (boolean; optional)`; query — —
1545
+ - **Pagination:** no documented pagination envelope
1546
+ - **Response:** `{ status, message }`
1547
+ - **Logical CLI:** `gq ploi site-file-backups create-site-file-backup`
1548
+ - **Source:** [Ploi API reference — Create site file backup](https://developers.ploi.io/site/create-site-file-backup)
1549
+
1550
+ ### Delete site file backup
1551
+
1552
+ - **Method/path:** `DELETE /api/backups/file/{siteFileBackup}`
1553
+ - **Path parameters:** `siteFileBackup`
1554
+ - **Request:** body — —; query — —
1555
+ - **Pagination:** no documented pagination envelope
1556
+ - **Response:** `{ status, message }`; **notes:** source example uses a concrete ID/domain; normalized here
1557
+ - **Logical CLI:** `gq ploi site-file-backups delete-site-file-backup`
1558
+ - **Source:** [Ploi API reference — Delete site file backup](https://developers.ploi.io/site/delete-site-file-backup)
1559
+
1560
+ ### Get site file backup
1561
+
1562
+ - **Method/path:** `GET /api/backups/file/{siteFileBackup}`
1563
+ - **Path parameters:** `siteFileBackup`
1564
+ - **Request:** body — —; query — —
1565
+ - **Pagination:** no documented pagination envelope
1566
+ - **Response:** `{ data: { id, status, label, type, type_human, path, remote_path, locations, interval, table_exclusions, keep_backup_amount, active, server_id, site, last_backup_at, created_at } }`; **notes:** source example uses a concrete ID/domain; normalized here
1567
+ - **Logical CLI:** `gq ploi site-file-backups show-site-file-backup`
1568
+ - **Source:** [Ploi API reference — Get site file backup](https://developers.ploi.io/site/get-site-file-backup)
1569
+
1570
+ ### List site file backups
1571
+
1572
+ - **Method/path:** `GET /api/backups/file`
1573
+ - **Path parameters:** —
1574
+ - **Request:** body — —; query — `server (integer; optional)`, `site (integer; optional)`, `per_page (integer; optional)`
1575
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1576
+ - **Response:** `{ data: array of { id, status, label, type, type_human, path, remote_path, locations, interval, table_exclusions, keep_backup_amount, active, server_id, site, last_backup_at, created_at }, links, meta }`
1577
+ - **Logical CLI:** `gq ploi site-file-backups list-site-file-backups`
1578
+ - **Source:** [Ploi API reference — List site file backups](https://developers.ploi.io/site/list-site-file-backups)
1579
+
1580
+ ### Run site file backup
1581
+
1582
+ - **Method/path:** `POST /api/backups/file/{siteFileBackup}/run`
1583
+ - **Path parameters:** `siteFileBackup`
1584
+ - **Request:** body — —; query — —
1585
+ - **Pagination:** no documented pagination envelope
1586
+ - **Response:** `{ status, message }`; **notes:** the source cURL uses literal backup ID `1`; normalized here
1587
+ - **Logical CLI:** `gq ploi site-file-backups run-site-file-backup`
1588
+ - **Source:** [Ploi API reference — Run site file backup](https://developers.ploi.io/site/run-site-file-backup)
1589
+
1590
+ ### Update site file backup
1591
+
1592
+ - **Method/path:** `PATCH /api/backups/file/{siteFileBackup}`
1593
+ - **Path parameters:** `siteFileBackup`
1594
+ - **Request:** body — `interval (integer; required)`, `keep_backup_amount (integer; required)`, `path (string; required)`, `deleteOnFail (boolean; optional)`, `custom_name (string; optional)`, `local_path (string; optional)`, `compression (string; optional)`, `excluded (array; optional)`, `locations (string; optional)`, `next_backup_at (string; optional)`; query — —
1595
+ - **Pagination:** no documented pagination envelope
1596
+ - **Response:** `{ data: { id, type, path, local_path, compression, interval, keep_backup_amount, custom_name, delete_on_fail, excluded, locations, status, last_backup_at, next_backup_at, created_at, site, backup_configuration } }`; **notes:** source example uses a concrete ID/domain; normalized here
1597
+ - **Logical CLI:** `gq ploi site-file-backups update-site-file-backup`
1598
+ - **Source:** [Ploi API reference — Update site file backup](https://developers.ploi.io/site/update-site-file-backup)
1599
+
1600
+ ## sites
1601
+
1602
+ ### Change PHP version
1603
+
1604
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/php-version`
1605
+ - **Path parameters:** `server`, `site`
1606
+ - **Request:** body — `php_version (string; required)`; query — —
1607
+ - **Pagination:** no documented pagination envelope
1608
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, disable_robots, has_repository, zero_downtime_deployment, has_staging, fastcgi_cache, created_at } }`
1609
+ - **Logical CLI:** `gq ploi sites change-php-version`
1610
+ - **Source:** [Ploi API reference — Change PHP version](https://developers.ploi.io/sites/change-php-version)
1611
+
1612
+ ### Clone site
1613
+
1614
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/clone`
1615
+ - **Path parameters:** `server`, `site`
1616
+ - **Request:** body — `clone_to_server (integer; required)`, `domain (string; optional)`; query — —
1617
+ - **Pagination:** no documented pagination envelope
1618
+ - **Response:** `{ status, message }`
1619
+ - **Logical CLI:** `gq ploi sites clone-site`
1620
+ - **Source:** [Ploi API reference — Clone site](https://developers.ploi.io/sites/clone-site)
1621
+
1622
+ ### Create site
1623
+
1624
+ - **Method/path:** `POST /api/servers/{server}/sites`
1625
+ - **Path parameters:** `server`
1626
+ - **Request:** body — `root_domain (string; required)`, `web_directory (string; required)`, `project_root (string; optional)`, `project_type (string; optional)`, `system_user (string; optional)`, `webserver_template (integer; optional)`, `webhook_url (url; optional)`; query — —
1627
+ - **Pagination:** no documented pagination envelope
1628
+ - **Response:** `{ data: { id, server_id, domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, notification_urls, has_repository, created_at } }`; `{ message, server, site }`
1629
+ - **Logical CLI:** `gq ploi sites create-site`
1630
+ - **Source:** [Ploi API reference — Create site](https://developers.ploi.io/sites/create-site)
1631
+
1632
+ ### Delete site
1633
+
1634
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}`
1635
+ - **Path parameters:** `server`, `id`
1636
+ - **Request:** body — —; query — —
1637
+ - **Pagination:** no documented pagination envelope
1638
+ - **Response:** `{ message }`
1639
+ - **Logical CLI:** `gq ploi sites delete-site`
1640
+ - **Source:** [Ploi API reference — Delete site](https://developers.ploi.io/sites/delete-site)
1641
+
1642
+ ### Disable test domain
1643
+
1644
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/test-domain`
1645
+ - **Path parameters:** `server`, `id`
1646
+ - **Request:** body — —; query — —
1647
+ - **Pagination:** no documented pagination envelope
1648
+ - **Response:** `{ data: { id, domain, test_domain, full_test_domain } }`
1649
+ - **Logical CLI:** `gq ploi sites disable-test-domain`
1650
+ - **Source:** [Ploi API reference — Disable test domain](https://developers.ploi.io/sites/disable-test-domain)
1651
+
1652
+ ### Enable test domain
1653
+
1654
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/test-domain`
1655
+ - **Path parameters:** `server`, `id`
1656
+ - **Request:** body — —; query — —
1657
+ - **Pagination:** no documented pagination envelope
1658
+ - **Response:** `{ data: { id, domain, test_domain, full_test_domain }, message }`
1659
+ - **Logical CLI:** `gq ploi sites enable-test-domain`
1660
+ - **Source:** [Ploi API reference — Enable test domain](https://developers.ploi.io/sites/enable-test-domain)
1661
+
1662
+ ### Get log site
1663
+
1664
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/log/{log}`
1665
+ - **Path parameters:** `server`, `id`, `log`
1666
+ - **Request:** body — —; query — —
1667
+ - **Pagination:** no documented pagination envelope
1668
+ - **Response:** `{ data: { id, description, content, type, created_at, created_at_human } }`
1669
+ - **Logical CLI:** `gq ploi sites show-log-site`
1670
+ - **Source:** [Ploi API reference — Get log site](https://developers.ploi.io/sites/get-log-site)
1671
+
1672
+ ### Get NGINX configuration
1673
+
1674
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/nginx-configuration`
1675
+ - **Path parameters:** `server`, `site`
1676
+ - **Request:** body — —; query — —
1677
+ - **Pagination:** no documented pagination envelope
1678
+ - **Response:** `{ content }`; **notes:** on-demand execution/retrieval is documented
1679
+ - **Logical CLI:** `gq ploi sites show-nginx-configuration`
1680
+ - **Source:** [Ploi API reference — Get NGINX configuration](https://developers.ploi.io/sites/get-nginx-configuration)
1681
+
1682
+ ### Get site
1683
+
1684
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}`
1685
+ - **Path parameters:** `server`, `id`
1686
+ - **Request:** body — —; query — —
1687
+ - **Pagination:** no documented pagination envelope
1688
+ - **Response:** `{ data: { id, server_id, status, domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, has_repository, quick_deploy, disk_usage, created_at } }`
1689
+ - **Logical CLI:** `gq ploi site show`
1690
+ - **Source:** [Ploi API reference — Get site](https://developers.ploi.io/sites/get-site)
1691
+
1692
+ ### Get test domain
1693
+
1694
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/test-domain`
1695
+ - **Path parameters:** `server`, `id`
1696
+ - **Request:** body — —; query — —
1697
+ - **Pagination:** no documented pagination envelope
1698
+ - **Response:** `{ data: { id, domain, test_domain, full_test_domain } }`
1699
+ - **Logical CLI:** `gq ploi sites show-test-domain`
1700
+ - **Source:** [Ploi API reference — Get test domain](https://developers.ploi.io/sites/get-test-domain)
1701
+
1702
+ ### Laravel Horizon statistics
1703
+
1704
+ - **Method/path:** `GET /api/servers/{server}/sites/laravel/horizon` (default) or `GET /api/servers/{server}/sites/laravel/horizon/{type}`
1705
+ - **Path parameters:** `server`; optional `type` — `stats`, `workload`, `masters`, or `failed` (defaults to `stats` when omitted)
1706
+ - **Request:** body — —; query — —
1707
+ - **Pagination:** no documented pagination envelope
1708
+ - **Response:** `{ data: { failedJobs, jobsPerMinute, pausedMasters, periods, processes, queueWithMaxRuntime, queueWithMaxThroughput, recentJobs, status, wait } }`; `{ data: array of { name, length, wait, processes } }`; `{ data: { from-macbook-pro-Ry0f } }`; `{ data: { jobs, total } }`; **notes:** the page's route badge includes `/{type}`, while its default cURL request omits it
1709
+ - **Logical CLI:** `gq ploi sites laravel-horizon-statistics`
1710
+ - **Source:** [Ploi API reference — Laravel Horizon statistics](https://developers.ploi.io/sites/laravel-horizon-statistics)
1711
+
1712
+ ### List sites
1713
+
1714
+ - **Method/path:** `GET /api/servers/{server}/sites`
1715
+ - **Path parameters:** `server`
1716
+ - **Request:** body — —; query — —
1717
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1718
+ - **Response:** `{ data: array of { id, status, server_id, domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, notification_urls, has_repository, quick_deploy, disk_usage, created_at }, links, meta }`
1719
+ - **Logical CLI:** `gq ploi sites list`
1720
+ - **Source:** [Ploi API reference — List sites](https://developers.ploi.io/sites/list-sites)
1721
+
1722
+ ### Log site
1723
+
1724
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/log`
1725
+ - **Path parameters:** `server`, `id`
1726
+ - **Request:** body — —; query — —
1727
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1728
+ - **Response:** `{ data: array of { id, description, content, type, created_at, created_at_human }, links, meta }`
1729
+ - **Logical CLI:** `gq ploi sites log-site`
1730
+ - **Source:** [Ploi API reference — Log site](https://developers.ploi.io/sites/log-site)
1731
+
1732
+ ### Reset site permissions
1733
+
1734
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/permission-reset`
1735
+ - **Path parameters:** `server`, `id`
1736
+ - **Request:** body — —; query — —
1737
+ - **Pagination:** no documented pagination envelope
1738
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, deploy_webhook_url, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, disable_robots, has_repository, zero_downtime_deployment, has_staging, fastcgi_cache, notes, created_at }, message }`; **notes:** operation may be queued/backgrounded
1739
+ - **Logical CLI:** `gq ploi sites reset-site-permissions`
1740
+ - **Source:** [Ploi API reference — Reset site permissions](https://developers.ploi.io/sites/reset-site-permissions)
1741
+
1742
+ ### Resume site
1743
+
1744
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/resume`
1745
+ - **Path parameters:** `server`, `id`
1746
+ - **Request:** body — —; query — —
1747
+ - **Pagination:** no documented pagination envelope
1748
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, has_repository, zero_downtime_deployment, fastcgi_cache, created_at } }`
1749
+ - **Logical CLI:** `gq ploi sites resume-site`
1750
+ - **Source:** [Ploi API reference — Resume site](https://developers.ploi.io/sites/resume-site)
1751
+
1752
+ ### Robot access
1753
+
1754
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{id}`
1755
+ - **Path parameters:** `server`, `id`
1756
+ - **Request:** body — `disable_robots (boolean; required)`; query — —
1757
+ - **Pagination:** no documented pagination envelope
1758
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, disable_robots, has_repository, zero_downtime_deployment, has_staging, fastcgi_cache, created_at } }`
1759
+ - **Logical CLI:** `gq ploi sites robot-access`
1760
+ - **Source:** [Ploi API reference — Robot access](https://developers.ploi.io/sites/robot-access)
1761
+
1762
+ ### Suspend site
1763
+
1764
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/suspend`
1765
+ - **Path parameters:** `server`, `id`
1766
+ - **Request:** body — `reason (string; optional)`; query — —
1767
+ - **Pagination:** no documented pagination envelope
1768
+ - **Response:** `{ data: { id, status, server_id, domain, test_domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, has_repository, zero_downtime_deployment, fastcgi_cache, created_at } }`
1769
+ - **Logical CLI:** `gq ploi sites suspend-site`
1770
+ - **Source:** [Ploi API reference — Suspend site](https://developers.ploi.io/sites/suspend-site)
1771
+
1772
+ ### Update NGINX configuration
1773
+
1774
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{site}/nginx-configuration`
1775
+ - **Path parameters:** `server`, `site`
1776
+ - **Request:** body — `content (string; required)`; query — —
1777
+ - **Pagination:** no documented pagination envelope
1778
+ - **Response:** `{ status, message }`; **notes:** on-demand execution/retrieval is documented
1779
+ - **Logical CLI:** `gq ploi sites update-nginx-configuration`
1780
+ - **Source:** [Ploi API reference — Update NGINX configuration](https://developers.ploi.io/sites/update-nginx-configuration)
1781
+
1782
+ ### Update site
1783
+
1784
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{site}`
1785
+ - **Path parameters:** `server`, `site`
1786
+ - **Request:** body — `root_domain (string; optional)`, `zero_downtime_deployment (boolean; optional)`, `disable_robots (boolean; optional)`; query — —
1787
+ - **Pagination:** no documented pagination envelope
1788
+ - **Response:** `{ data: { id, server_id, domain, deploy_script, web_directory, project_type, project_root, last_deploy_at, system_user, php_version, health_url, notification_urls, has_repository, created_at }, message }`; **notes:** operation may be queued/backgrounded
1789
+ - **Logical CLI:** `gq ploi sites update-site`
1790
+ - **Source:** [Ploi API reference — Update site](https://developers.ploi.io/sites/update-site)
1791
+
1792
+ ## ssh-keys
1793
+
1794
+ ### Create SSH key
1795
+
1796
+ - **Method/path:** `POST /api/servers/{server}/ssh-keys`
1797
+ - **Path parameters:** `server`
1798
+ - **Request:** body — `name (string; required)`, `key (string; required)`, `system_user (string; optional)`; query — —
1799
+ - **Pagination:** no documented pagination envelope
1800
+ - **Response:** `{ data: { id, status, name, key, system_user } }`
1801
+ - **Logical CLI:** `gq ploi ssh-keys create-ssh-key`
1802
+ - **Source:** [Ploi API reference — Create SSH key](https://developers.ploi.io/ssh-keys/create-ssh-key)
1803
+
1804
+ ### Delete SSH key
1805
+
1806
+ - **Method/path:** `DELETE /api/servers/{server}/ssh-keys/{sshKey}`
1807
+ - **Path parameters:** `server`, `sshKey`
1808
+ - **Request:** body — —; query — —
1809
+ - **Pagination:** no documented pagination envelope
1810
+ - **Response:** `{ message }`
1811
+ - **Logical CLI:** `gq ploi ssh-keys delete-ssh-key`
1812
+ - **Source:** [Ploi API reference — Delete SSH key](https://developers.ploi.io/ssh-keys/delete-ssh-key)
1813
+
1814
+ ### Get SSH key
1815
+
1816
+ - **Method/path:** `GET /api/servers/{server}/ssh-keys/{sshKey}`
1817
+ - **Path parameters:** `server`, `sshKey`
1818
+ - **Request:** body — —; query — —
1819
+ - **Pagination:** no documented pagination envelope
1820
+ - **Response:** `{ data: { id, status, name, key, system_user } }`
1821
+ - **Logical CLI:** `gq ploi ssh-keys show-ssh-key`
1822
+ - **Source:** [Ploi API reference — Get SSH key](https://developers.ploi.io/ssh-keys/get-ssh-key)
1823
+
1824
+ ### List SSH keys
1825
+
1826
+ - **Method/path:** `GET /api/servers/{server}/ssh-keys`
1827
+ - **Path parameters:** `server`
1828
+ - **Request:** body — —; query — —
1829
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1830
+ - **Response:** `{ data: array of { id, status, name, key, system_user }, links, meta }`
1831
+ - **Logical CLI:** `gq ploi ssh-keys list-ssh-keys`
1832
+ - **Source:** [Ploi API reference — List SSH keys](https://developers.ploi.io/ssh-keys/list-ssh-keys)
1833
+
1834
+ ## status-pages
1835
+
1836
+ ### Create status page incident
1837
+
1838
+ - **Method/path:** `POST /api/status-pages/{statusPage}/incidents`
1839
+ - **Path parameters:** `statusPage`
1840
+ - **Request:** body — `title (string; required)`, `description (string; optional)`, `severity (string; optional)`; query — —
1841
+ - **Pagination:** no documented pagination envelope
1842
+ - **Response:** `{ data: { id, title, description, severity } }`
1843
+ - **Logical CLI:** `gq ploi status-pages create-status-page-incident`
1844
+ - **Source:** [Ploi API reference — Create status page incident](https://developers.ploi.io/status-pages/create-status-page-incident)
1845
+
1846
+ ### Delete status page incident
1847
+
1848
+ - **Method/path:** `DELETE /api/status-pages/{statusPage}/incident/{incident}`
1849
+ - **Path parameters:** `statusPage`, `incident`
1850
+ - **Request:** body — —; query — —
1851
+ - **Pagination:** no documented pagination envelope
1852
+ - **Response:** `{ message }`
1853
+ - **Logical CLI:** `gq ploi status-pages delete-status-page-incident`
1854
+ - **Source:** [Ploi API reference — Delete status page incident](https://developers.ploi.io/status-pages/delete-status-page-incident)
1855
+
1856
+ ### Get status page incidents
1857
+
1858
+ - **Method/path:** `GET /api/status-pages/{statusPage}/incidents`
1859
+ - **Path parameters:** `statusPage`
1860
+ - **Request:** body — —; query — —
1861
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1862
+ - **Response:** `{ data: array of { id, title, description, severity }, links, meta }`
1863
+ - **Logical CLI:** `gq ploi status-pages show-status-page-incidents`
1864
+ - **Source:** [Ploi API reference — Get status page incidents](https://developers.ploi.io/status-pages/get-status-page-incidents)
1865
+
1866
+ ### Get status page
1867
+
1868
+ - **Method/path:** `GET /api/status-pages/{statusPage}`
1869
+ - **Path parameters:** `statusPage`
1870
+ - **Request:** body — —; query — —
1871
+ - **Pagination:** no documented pagination envelope
1872
+ - **Response:** `{ data: { id, name, slug, description, theme } }`
1873
+ - **Logical CLI:** `gq ploi status-pages show-status-page`
1874
+ - **Source:** [Ploi API reference — Get status page](https://developers.ploi.io/status-pages/get-status-page)
1875
+
1876
+ ### List status pages
1877
+
1878
+ - **Method/path:** `GET /api/status-pages`
1879
+ - **Path parameters:** —
1880
+ - **Request:** body — —; query — —
1881
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1882
+ - **Response:** `{ data: array of { id, name, slug, description, theme }, links, meta }`
1883
+ - **Logical CLI:** `gq ploi status-pages list-status-pages`
1884
+ - **Source:** [Ploi API reference — List status pages](https://developers.ploi.io/status-pages/list-status-pages)
1885
+
1886
+ ## system-users
1887
+
1888
+ ### Create system user
1889
+
1890
+ - **Method/path:** `POST /api/servers/{server}/system-users`
1891
+ - **Path parameters:** `server`
1892
+ - **Request:** body — `name (string; required)`, `sudo (boolean; optional)`, `receive_password (boolean; optional)`; query — —
1893
+ - **Pagination:** no documented pagination envelope
1894
+ - **Response:** `{ data: { id, name, root, created_at } }`; `{ data: { id, name, root, created_at }, password }`
1895
+ - **Logical CLI:** `gq ploi system-users create-system-user`
1896
+ - **Source:** [Ploi API reference — Create system user](https://developers.ploi.io/system-users/create-system-user)
1897
+
1898
+ ### Delete system user
1899
+
1900
+ - **Method/path:** `DELETE /api/servers/{server}/system-users/{systemUser}`
1901
+ - **Path parameters:** `server`, `systemUser`
1902
+ - **Request:** body — —; query — —
1903
+ - **Pagination:** no documented pagination envelope
1904
+ - **Response:** `empty response body`; **notes:** documented empty response body
1905
+ - **Logical CLI:** `gq ploi system-users delete-system-user`
1906
+ - **Source:** [Ploi API reference — Delete system user](https://developers.ploi.io/system-users/delete-system-user)
1907
+
1908
+ ### Get system user
1909
+
1910
+ - **Method/path:** `GET /api/servers/{server}/system-users/{systemUser}`
1911
+ - **Path parameters:** `server`, `systemUser`
1912
+ - **Request:** body — —; query — —
1913
+ - **Pagination:** no documented pagination envelope
1914
+ - **Response:** `{ data: { id, name, root, created_at } }`
1915
+ - **Logical CLI:** `gq ploi system-users show-system-user`
1916
+ - **Source:** [Ploi API reference — Get system user](https://developers.ploi.io/system-users/get-system-user)
1917
+
1918
+ ### List system users
1919
+
1920
+ - **Method/path:** `GET /api/servers/{server}/system-users`
1921
+ - **Path parameters:** `server`
1922
+ - **Request:** body — —; query — —
1923
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
1924
+ - **Response:** `{ data: array of { id, name, root, created_at }, links, meta }`
1925
+ - **Logical CLI:** `gq ploi system-users list-system-users`
1926
+ - **Source:** [Ploi API reference — List system users](https://developers.ploi.io/system-users/list-system-users)
1927
+
1928
+ ## tenants
1929
+
1930
+ ### Create tenant
1931
+
1932
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/tenants`
1933
+ - **Path parameters:** `server`, `site`
1934
+ - **Request:** body — `tenants (array; required)`; query — —
1935
+ - **Pagination:** no documented pagination envelope
1936
+ - **Response:** `{ data: { tenants, count, main } }`
1937
+ - **Logical CLI:** `gq ploi tenants create-tenant`
1938
+ - **Source:** [Ploi API reference — Create tenant](https://developers.ploi.io/tenants/create-tenant)
1939
+
1940
+ ### Delete certificate
1941
+
1942
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/tenants/{tenant}/revoke-certificate`
1943
+ - **Path parameters:** `server`, `site`, `tenant`
1944
+ - **Request:** body — `webhook (string; required)`; query — —
1945
+ - **Pagination:** no documented pagination envelope
1946
+ - **Response:** `HTTP response example (not JSON body)`; **notes:** 404 behavior documented; source example uses a concrete ID/domain; normalized here
1947
+ - **Logical CLI:** `gq ploi tenants delete-certificate`
1948
+ - **Source:** [Ploi API reference — Delete certificate](https://developers.ploi.io/tenants/delete-certificate)
1949
+
1950
+ ### Delete tenant
1951
+
1952
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{site}/tenants/{tenant}`
1953
+ - **Path parameters:** `server`, `site`, `tenant`
1954
+ - **Request:** body — —; query — —
1955
+ - **Pagination:** no documented pagination envelope
1956
+ - **Response:** `HTTP response example (not JSON body)`; **notes:** 404 behavior documented; source example uses a concrete ID/domain; normalized here
1957
+ - **Logical CLI:** `gq ploi tenants delete-tenant`
1958
+ - **Source:** [Ploi API reference — Delete tenant](https://developers.ploi.io/tenants/delete-tenant)
1959
+
1960
+ ### Get NGINX configuration
1961
+
1962
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/tenants/{tenant}/nginx-configuration`
1963
+ - **Path parameters:** `server`, `site`, `tenant`
1964
+ - **Request:** body — —; query — —
1965
+ - **Pagination:** no documented pagination envelope
1966
+ - **Response:** `{ content }`; **notes:** on-demand execution/retrieval is documented; 404 behavior documented; source example uses a concrete ID/domain; normalized here
1967
+ - **Logical CLI:** `gq ploi tenants show-nginx-configuration-tenant`
1968
+ - **Source:** [Ploi API reference — Get NGINX configuration](https://developers.ploi.io/tenants/get-nginx-configuration-tenant)
1969
+
1970
+ ### List tenants
1971
+
1972
+ - **Method/path:** `GET /api/servers/{server}/sites/{site}/tenants`
1973
+ - **Path parameters:** `server`, `site`
1974
+ - **Request:** body — —; query — —
1975
+ - **Pagination:** no documented pagination envelope
1976
+ - **Response:** `{ data: { tenants, count, main } }`
1977
+ - **Logical CLI:** `gq ploi tenants list-tenants`
1978
+ - **Source:** [Ploi API reference — List tenants](https://developers.ploi.io/tenants/list-tenants)
1979
+
1980
+ ### Request certificate
1981
+
1982
+ - **Method/path:** `POST /api/servers/{server}/sites/{site}/tenants/{tenant}/request-certificate`
1983
+ - **Path parameters:** `server`, `site`, `tenant`
1984
+ - **Request:** body — `webhook (string; optional)`, `domains (string; optional)`, `additional[type] (string; optional)`, `force (boolean; optional)`, `additional[use_dns_provider] (boolean; optional)`, `additional[provider] (string; optional)`, `additional[secret] (string; optional)`, `additional[use_from_profile] (boolean; optional)`, `additional[credential] (integer; optional)`; query — —
1985
+ - **Pagination:** no documented pagination envelope
1986
+ - **Response:** `HTTP response example (not JSON body)`; **notes:** 404 behavior documented; source example uses a concrete ID/domain; normalized here
1987
+ - **Logical CLI:** `gq ploi tenants request-certificate`
1988
+ - **Source:** [Ploi API reference — Request certificate](https://developers.ploi.io/tenants/request-certificate)
1989
+
1990
+ ### Update NGINX configuration
1991
+
1992
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{site}/tenants/{tenant}/nginx-configuration`
1993
+ - **Path parameters:** `server`, `site`, `tenant`
1994
+ - **Request:** body — `content (string; required)`; query — —
1995
+ - **Pagination:** no documented pagination envelope
1996
+ - **Response:** `{ status, message }`; **notes:** on-demand execution/retrieval is documented; 404 behavior documented; source example uses a concrete ID/domain; normalized here
1997
+ - **Logical CLI:** `gq ploi tenants update-nginx-configuration-tenant`
1998
+ - **Source:** [Ploi API reference — Update NGINX configuration](https://developers.ploi.io/tenants/update-nginx-configuration-tenant)
1999
+
2000
+ ## user
2001
+
2002
+ ### Get backup configuration
2003
+
2004
+ - **Method/path:** `GET /api/user/backup-configurations/{backupConfiguration}`
2005
+ - **Path parameters:** `backupConfiguration`
2006
+ - **Request:** body — —; query — —
2007
+ - **Pagination:** no documented pagination envelope
2008
+ - **Response:** `{ data: { id, label, type, humanType, created_at } }`
2009
+ - **Logical CLI:** `gq ploi user show-backup-configuration`
2010
+ - **Source:** [Ploi API reference — Get backup configuration](https://developers.ploi.io/user/get-backup-configuration)
2011
+
2012
+ ### Get server provider
2013
+
2014
+ - **Method/path:** `GET /api/user/server-providers/{provider}`
2015
+ - **Path parameters:** `provider`
2016
+ - **Request:** body — —; query — —
2017
+ - **Pagination:** no documented pagination envelope
2018
+ - **Response:** `{ data: { id, label, name, created_at, provider } }`
2019
+ - **Logical CLI:** `gq ploi user show-server-provider`
2020
+ - **Source:** [Ploi API reference — Get server provider](https://developers.ploi.io/user/get-server-provider)
2021
+
2022
+ ### Information
2023
+
2024
+ - **Method/path:** `GET /api/user`
2025
+ - **Path parameters:** —
2026
+ - **Request:** body — —; query — —
2027
+ - **Pagination:** no documented pagination envelope
2028
+ - **Response:** `{ data: { avatar, name, email, billing_details, country, timezone, created_at, plan, plan_expires_at } }`
2029
+ - **Logical CLI:** `gq ploi user show`
2030
+ - **Source:** [Ploi API reference — Information](https://developers.ploi.io/user/information)
2031
+
2032
+ ### List backup configurations
2033
+
2034
+ - **Method/path:** `GET /api/user/backup-configurations`
2035
+ - **Path parameters:** —
2036
+ - **Request:** body — —; query — —
2037
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
2038
+ - **Response:** `{ data: array of { id, label, type, humanType, created_at }, links, meta }`
2039
+ - **Logical CLI:** `gq ploi user list-backup-configurations`
2040
+ - **Source:** [Ploi API reference — List backup configurations](https://developers.ploi.io/user/list-backup-configurations)
2041
+
2042
+ ### List server providers
2043
+
2044
+ - **Method/path:** `GET /api/user/server-providers`
2045
+ - **Path parameters:** —
2046
+ - **Request:** body — —; query — —
2047
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
2048
+ - **Response:** `{ data: array of { id, label, name, created_at, provider }, links, meta }`
2049
+ - **Logical CLI:** `gq ploi user list-server-providers`
2050
+ - **Source:** [Ploi API reference — List server providers](https://developers.ploi.io/user/list-server-providers)
2051
+
2052
+ ### List source control providers
2053
+
2054
+ - **Method/path:** `GET /api/user/source-control`
2055
+ - **Path parameters:** —
2056
+ - **Request:** body — —; query — —
2057
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
2058
+ - **Response:** `{ data: array of { id, label, name, provider, created_at }, links, meta }`
2059
+ - **Logical CLI:** `gq ploi user list-source-control-providers`
2060
+ - **Source:** [Ploi API reference — List source control providers](https://developers.ploi.io/user/list-source-control-providers)
2061
+
2062
+ ### Repositories for source control provider
2063
+
2064
+ - **Method/path:** `GET /api/user/source-control/{provider}/repositories`
2065
+ - **Path parameters:** `provider`
2066
+ - **Request:** body — —; query — —
2067
+ - **Pagination:** no documented pagination envelope
2068
+ - **Response:** `{ data: { repositories } }`; **notes:** source example uses a concrete ID/domain; normalized here
2069
+ - **Logical CLI:** `gq ploi user repositories-for-source-control-providers`
2070
+ - **Source:** [Ploi API reference — Repositories for source control provider](https://developers.ploi.io/user/repositories-for-source-control-providers)
2071
+
2072
+ ### Show source control provider
2073
+
2074
+ - **Method/path:** `GET /api/user/source-control/{provider}`
2075
+ - **Path parameters:** `provider`
2076
+ - **Request:** body — —; query — —
2077
+ - **Pagination:** no documented pagination envelope
2078
+ - **Response:** `{ data: { id, label, name, provider, created_at } }`; **notes:** source example uses a concrete ID/domain; normalized here
2079
+ - **Logical CLI:** `gq ploi user show-source-control-providers`
2080
+ - **Source:** [Ploi API reference — Show source control provider](https://developers.ploi.io/user/show-source-control-providers)
2081
+
2082
+ ## webserver-templates
2083
+
2084
+ ### Get webserver template
2085
+
2086
+ - **Method/path:** `GET /api/webserver-templates/{id}`
2087
+ - **Path parameters:** `id`
2088
+ - **Request:** body — —; query — —
2089
+ - **Pagination:** no documented pagination envelope
2090
+ - **Response:** `{ data: { id, label, content, created_at } }`
2091
+ - **Logical CLI:** `gq ploi webserver-templates show-webserver-template`
2092
+ - **Source:** [Ploi API reference — Get webserver template](https://developers.ploi.io/webserver-templates/get-webserver-template)
2093
+
2094
+ ### List webserver templates
2095
+
2096
+ - **Method/path:** `GET /api/webserver-templates`
2097
+ - **Path parameters:** —
2098
+ - **Request:** body — —; query — —
2099
+ - **Pagination:** yes — documented `data`, `links`, and `meta` envelope
2100
+ - **Response:** `{ data: array of { id, label, content, created_at }, links, meta }`
2101
+ - **Logical CLI:** `gq ploi webserver-templates list-webserver-templates`
2102
+ - **Source:** [Ploi API reference — List webserver templates](https://developers.ploi.io/webserver-templates/list-webserver-templates)
2103
+
2104
+ ## wordpress-management
2105
+
2106
+ ### Activate plugin
2107
+
2108
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/plugins/activate`
2109
+ - **Path parameters:** `server`, `id`
2110
+ - **Request:** body — `plugin (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2111
+ - **Pagination:** no documented pagination envelope
2112
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2113
+ - **Logical CLI:** `gq ploi wordpress activate-plugin`
2114
+ - **Source:** [Ploi API reference — Activate plugin](https://developers.ploi.io/wordpress-management/activate-plugin)
2115
+
2116
+ ### Activate theme
2117
+
2118
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/themes/activate`
2119
+ - **Path parameters:** `server`, `id`
2120
+ - **Request:** body — `theme (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2121
+ - **Pagination:** no documented pagination envelope
2122
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2123
+ - **Logical CLI:** `gq ploi wordpress activate-theme`
2124
+ - **Source:** [Ploi API reference — Activate theme](https://developers.ploi.io/wordpress-management/activate-theme)
2125
+
2126
+ ### Complete install
2127
+
2128
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/complete-install`
2129
+ - **Path parameters:** `server`, `id`
2130
+ - **Request:** body — `site_title (string; required)`, `admin_username (string; required)`, `admin_email (string; required)`, `admin_password (string; required)`; query — —
2131
+ - **Pagination:** no documented pagination envelope
2132
+ - **Response:** `{ status, message }`; `{ errors }`
2133
+ - **Logical CLI:** `gq ploi wordpress complete-install`
2134
+ - **Source:** [Ploi API reference — Complete install](https://developers.ploi.io/wordpress-management/complete-install)
2135
+
2136
+ ### Deactivate plugin
2137
+
2138
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/plugins/deactivate`
2139
+ - **Path parameters:** `server`, `id`
2140
+ - **Request:** body — `plugin (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2141
+ - **Pagination:** no documented pagination envelope
2142
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2143
+ - **Logical CLI:** `gq ploi wordpress deactivate-plugin`
2144
+ - **Source:** [Ploi API reference — Deactivate plugin](https://developers.ploi.io/wordpress-management/deactivate-plugin)
2145
+
2146
+ ### Delete plugin
2147
+
2148
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/wordpress/plugins/delete`
2149
+ - **Path parameters:** `server`, `id`
2150
+ - **Request:** body — `plugin (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2151
+ - **Pagination:** no documented pagination envelope
2152
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2153
+ - **Logical CLI:** `gq ploi wordpress delete-plugin`
2154
+ - **Source:** [Ploi API reference — Delete plugin](https://developers.ploi.io/wordpress-management/delete-plugin)
2155
+
2156
+ ### Delete repository
2157
+
2158
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/wordpress/repositories/{repository}`
2159
+ - **Path parameters:** `server`, `id`, `repository`
2160
+ - **Request:** body — —; query — —
2161
+ - **Pagination:** no documented pagination envelope
2162
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded
2163
+ - **Logical CLI:** `gq ploi wordpress delete-repository`
2164
+ - **Source:** [Ploi API reference — Delete repository](https://developers.ploi.io/wordpress-management/delete-repository)
2165
+
2166
+ ### Delete theme
2167
+
2168
+ - **Method/path:** `DELETE /api/servers/{server}/sites/{id}/wordpress/themes/delete`
2169
+ - **Path parameters:** `server`, `id`
2170
+ - **Request:** body — `theme (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2171
+ - **Pagination:** no documented pagination envelope
2172
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2173
+ - **Logical CLI:** `gq ploi wordpress delete-theme`
2174
+ - **Source:** [Ploi API reference — Delete theme](https://developers.ploi.io/wordpress-management/delete-theme)
2175
+
2176
+ ### Deploy all repositories
2177
+
2178
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/repositories/deploy-all`
2179
+ - **Path parameters:** `server`, `id`
2180
+ - **Request:** body — —; query — —
2181
+ - **Pagination:** no documented pagination envelope
2182
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded
2183
+ - **Logical CLI:** `gq ploi wordpress deploy-all-repositories`
2184
+ - **Source:** [Ploi API reference — Deploy all repositories](https://developers.ploi.io/wordpress-management/deploy-all-repositories)
2185
+
2186
+ ### Deploy repository
2187
+
2188
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/repositories/{repository}/deploy`
2189
+ - **Path parameters:** `server`, `id`, `repository`
2190
+ - **Request:** body — —; query — —
2191
+ - **Pagination:** no documented pagination envelope
2192
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded
2193
+ - **Logical CLI:** `gq ploi wordpress deploy-repository`
2194
+ - **Source:** [Ploi API reference — Deploy repository](https://developers.ploi.io/wordpress-management/deploy-repository)
2195
+
2196
+ ### Install plugin
2197
+
2198
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/plugins/install`
2199
+ - **Path parameters:** `server`, `id`
2200
+ - **Request:** body — `plugin (string; required)`, `activate (boolean; optional)`; query — `ondemand (boolean; query)`, `ondemand=true`
2201
+ - **Pagination:** no documented pagination envelope
2202
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2203
+ - **Logical CLI:** `gq ploi wordpress install-plugin`
2204
+ - **Source:** [Ploi API reference — Install plugin](https://developers.ploi.io/wordpress-management/install-plugin)
2205
+
2206
+ ### Install repository
2207
+
2208
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/repositories`
2209
+ - **Path parameters:** `server`, `id`
2210
+ - **Request:** body — `provider (string; required)`, `name (string; required)`, `branch (string; required)`, `target_directory (string; required)`, `source_provider_id (integer; optional)`; query — —
2211
+ - **Pagination:** no documented pagination envelope
2212
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded
2213
+ - **Logical CLI:** `gq ploi wordpress install-repository`
2214
+ - **Source:** [Ploi API reference — Install repository](https://developers.ploi.io/wordpress-management/install-repository)
2215
+
2216
+ ### Install theme
2217
+
2218
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/themes/install`
2219
+ - **Path parameters:** `server`, `id`
2220
+ - **Request:** body — `theme (string; required)`, `activate (boolean; optional)`; query — `ondemand (boolean; query)`, `ondemand=true`
2221
+ - **Pagination:** no documented pagination envelope
2222
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2223
+ - **Logical CLI:** `gq ploi wordpress install-theme`
2224
+ - **Source:** [Ploi API reference — Install theme](https://developers.ploi.io/wordpress-management/install-theme)
2225
+
2226
+ ### List plugins
2227
+
2228
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/wordpress/plugins`
2229
+ - **Path parameters:** `server`, `id`
2230
+ - **Request:** body — —; query — `ondemand (boolean; query)`, `ondemand=true`
2231
+ - **Pagination:** no documented pagination envelope
2232
+ - **Response:** `{ data: array of { name, title, status, version, update_version, auto_update } }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2233
+ - **Logical CLI:** `gq ploi wordpress list-plugins`
2234
+ - **Source:** [Ploi API reference — List plugins](https://developers.ploi.io/wordpress-management/list-plugins)
2235
+
2236
+ ### List repositories
2237
+
2238
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/wordpress/repositories`
2239
+ - **Path parameters:** `server`, `id`
2240
+ - **Request:** body — —; query — —
2241
+ - **Pagination:** no documented pagination envelope
2242
+ - **Response:** `{ data: array of { id, user, name, branch, type, target_directory, deploy_script, status } }`
2243
+ - **Logical CLI:** `gq ploi wordpress list-repositories`
2244
+ - **Source:** [Ploi API reference — List repositories](https://developers.ploi.io/wordpress-management/list-repositories)
2245
+
2246
+ ### List themes
2247
+
2248
+ - **Method/path:** `GET /api/servers/{server}/sites/{id}/wordpress/themes`
2249
+ - **Path parameters:** `server`, `id`
2250
+ - **Request:** body — —; query — `ondemand (boolean; query)`, `ondemand=true`
2251
+ - **Pagination:** no documented pagination envelope
2252
+ - **Response:** `{ data: array of { name, title, status, version, update_version, auto_update } }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2253
+ - **Logical CLI:** `gq ploi wordpress list-themes`
2254
+ - **Source:** [Ploi API reference — List themes](https://developers.ploi.io/wordpress-management/list-themes)
2255
+
2256
+ ### Run WP-CLI command
2257
+
2258
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/wp-cli/run`
2259
+ - **Path parameters:** `server`, `id`
2260
+ - **Request:** body — `command (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2261
+ - **Pagination:** no documented pagination envelope
2262
+ - **Response:** `{ output }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2263
+ - **Logical CLI:** `gq ploi wordpress run-wp-cli-command`
2264
+ - **Source:** [Ploi API reference — Run WP-CLI command](https://developers.ploi.io/wordpress-management/run-wp-cli-command)
2265
+
2266
+ ### Search & replace
2267
+
2268
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/search-replace`
2269
+ - **Path parameters:** `server`, `id`
2270
+ - **Request:** body — `search (string; required)`, `replace (string; required)`, `dry_run (boolean; optional)`; query — `ondemand (boolean; query)`, `ondemand=true`
2271
+ - **Pagination:** no documented pagination envelope
2272
+ - **Response:** `{ output }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2273
+ - **Logical CLI:** `gq ploi wordpress search-replace`
2274
+ - **Source:** [Ploi API reference — Search & replace](https://developers.ploi.io/wordpress-management/search-replace)
2275
+
2276
+ ### Toggle XML-RPC
2277
+
2278
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/toggle-xmlrpc`
2279
+ - **Path parameters:** `server`, `id`
2280
+ - **Request:** body — `block (boolean; required)`; query — —
2281
+ - **Pagination:** no documented pagination envelope
2282
+ - **Response:** `{ status, message }`
2283
+ - **Logical CLI:** `gq ploi wordpress toggle-xmlrpc`
2284
+ - **Source:** [Ploi API reference — Toggle XML-RPC](https://developers.ploi.io/wordpress-management/toggle-xmlrpc)
2285
+
2286
+ ### Update plugin
2287
+
2288
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/plugins/update`
2289
+ - **Path parameters:** `server`, `id`
2290
+ - **Request:** body — `plugin (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2291
+ - **Pagination:** no documented pagination envelope
2292
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2293
+ - **Logical CLI:** `gq ploi wordpress update-plugin`
2294
+ - **Source:** [Ploi API reference — Update plugin](https://developers.ploi.io/wordpress-management/update-plugin)
2295
+
2296
+ ### Update deploy script
2297
+
2298
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{id}/wordpress/repositories/{repository}/deploy-script`
2299
+ - **Path parameters:** `server`, `id`, `repository`
2300
+ - **Request:** body — `deploy_script (string; required)`; query — —
2301
+ - **Pagination:** no documented pagination envelope
2302
+ - **Response:** `{ status, message }`
2303
+ - **Logical CLI:** `gq ploi wordpress update-repository-deploy-script`
2304
+ - **Source:** [Ploi API reference — Update deploy script](https://developers.ploi.io/wordpress-management/update-repository-deploy-script)
2305
+
2306
+ ### Update repository
2307
+
2308
+ - **Method/path:** `PATCH /api/servers/{server}/sites/{id}/wordpress/repositories/{repository}`
2309
+ - **Path parameters:** `server`, `id`, `repository`
2310
+ - **Request:** body — `user (string; optional)`, `name (string; optional)`, `branch (string; optional)`; query — —
2311
+ - **Pagination:** no documented pagination envelope
2312
+ - **Response:** `{ status, message }`
2313
+ - **Logical CLI:** `gq ploi wordpress update-repository`
2314
+ - **Source:** [Ploi API reference — Update repository](https://developers.ploi.io/wordpress-management/update-repository)
2315
+
2316
+ ### Update theme
2317
+
2318
+ - **Method/path:** `POST /api/servers/{server}/sites/{id}/wordpress/themes/update`
2319
+ - **Path parameters:** `server`, `id`
2320
+ - **Request:** body — `theme (string; required)`; query — `ondemand (boolean; query)`, `ondemand=true`
2321
+ - **Pagination:** no documented pagination envelope
2322
+ - **Response:** `{ status, message }`; **notes:** operation may be queued/backgrounded; on-demand execution/retrieval is documented
2323
+ - **Logical CLI:** `gq ploi wordpress update-theme`
2324
+ - **Source:** [Ploi API reference — Update theme](https://developers.ploi.io/wordpress-management/update-theme)
2325
+
2326
+ ## getting-started
2327
+
2328
+ ### Teapot
2329
+
2330
+ - **Method/path:** GET /api/teapot
2331
+ - **Path parameters:** —
2332
+ - **Request:** body — —; query — —
2333
+ - **Pagination:** no documented pagination envelope
2334
+ - **Response:** { message, images, links }; **notes:** documented response status is 418
2335
+ - **Logical CLI:** **gq ploi teapot show** (not currently implemented)
2336
+ - **Source:** [Ploi API reference — Teapot](https://developers.ploi.io/getting-started/teapot)
2337
+
2338
+ ## Ambiguities, duplicates, and undocumented behavior
2339
+
2340
+ - **No deprecation markers found.** The official resource sitemap, Teapot page, and endpoint pages contain no explicit “deprecated” designation as of this snapshot. Absence of a marker is not proof that an undocumented legacy route is supported.
2341
+ - **Literal examples vs parameterized paths.** Several pages show concrete values in cURL instead of placeholders (aliases, Docker containers, backup IDs, load-balancer domains, tenant domains, source-control provider IDs). The inventory records the logical parameter and flags those rows; callers should not copy the example literal.
2342
+ - **Same path, different operation semantics.** Site update and robot-access are both `PATCH /api/servers/{server}/sites/{site-or-id}` and are distinguished by their body fields. WordPress plugin/theme operations also reuse action-shaped paths with fields and the `ondemand` query switch.
2343
+ - **Optional Horizon path segment.** The Horizon page's route badge is `GET /api/servers/{server}/sites/laravel/horizon/{type}`, but its default cURL uses the same path without `/{type}`. The page calls `type` optional and defaults it to `stats`, so this inventory records both route forms rather than treating `type` as a request body field.
2344
+ - **Navigation method badges disagree with endpoint pages.** The API-reference landing page labels Update server, Update site, Update NGINX configuration, and Update container as `PUT`, and Change PHP version as `PUT`; the dedicated endpoint pages and cURL samples document `PATCH`, `PATCH`, `PATCH`, `PATCH`, and `POST`, respectively. This inventory follows each dedicated endpoint page. Sources: [API-reference landing page](https://developers.ploi.io/), [Update server](https://developers.ploi.io/servers/update-server), [Update site](https://developers.ploi.io/sites/update-site), [Update NGINX configuration](https://developers.ploi.io/sites/update-nginx-configuration), [Update container](https://developers.ploi.io/containers/update-container), and [Change PHP version](https://developers.ploi.io/sites/change-php-version).
2345
+ - **Log pair.** [Log site](https://developers.ploi.io/sites/log-site) lists paginated log entries at '/log'; [Get log site](https://developers.ploi.io/sites/get-log-site) fetches one full entry at '/log/{log}'. The two pages are related, not duplicate operations.
2346
+ - **NGINX pair.** Site and tenant NGINX pages have the same operation names but different paths; both say retrieval/update may happen on-demand and the update response asks the caller to reload/restart NGINX.
2347
+ - **Pagination inconsistencies.** Some list-named pages show only `data` (for example aliases, queues, schedules, network rules, tenants, and WordPress resources) while others show `links`/`meta`. Database-backup list documents filters `server`, `site`, and `per_page`, but its example pagination links use `database_page`; this is recorded as the source shows it and should be treated as ambiguous. The repository provider additionally follows `meta.next_page_url`, although the current official pagination guide documents `links.next` but not that fallback.
2348
+ - **Response inconsistencies.** Delete pages variously document an empty body, a 'message', or a 'data' object; some pages show HTTP response headers rather than a JSON body. Consumers should follow each row's source rather than assume one envelope.
2349
+ - **Scope metadata.** The scopes guide says each endpoint has its own token scope, and the MCP guide says REST-style matching read/create scopes apply, but most resource pages do not state a required scope. Treat the scope as **undocumented per endpoint** unless the cited page explicitly provides one; do not infer it from the HTTP verb.
2350
+ - **MCP is curated, not a one-to-one REST catalogue.** Ploi documents the streamable HTTP MCP server at 'https://ploi.io/api/mcp'; OAuth requires 'mcp:use', while API-token access uses REST scopes. Its published tool list omits infrastructure delete operations and includes some capabilities whose REST reference page is not a direct one-to-one tool (for example 'list-deployments', 'get-deployment-log', and 'reset-database-user-password'). Source: [MCP documentation](https://developers.ploi.io/getting-started/mcp).
2351
+
2352
+ ## MCP tool cross-reference
2353
+
2354
+ The first-party MCP page publishes these curated logical tools (not HTTP paths):
2355
+
2356
+ - **Servers:** 'list-servers', 'get-server', 'create-server', 'list-server-providers', 'list-server-logs', 'list-server-services', 'restart-server-service', 'reload-server-service', 'restart-server'.
2357
+ - **Sites:** 'list-sites', 'get-site', 'create-site', 'list-site-logs', 'get-site-env', 'update-site-env', 'get-nginx-config', 'update-nginx-config', 'enable-fastcgi-cache', 'disable-fastcgi-cache', 'flush-fastcgi-cache'.
2358
+ - **Tenants/aliases:** 'list-site-tenants', 'add-site-tenants', 'get-tenant-nginx-config', 'update-tenant-nginx-config', 'request-tenant-certificate', 'revoke-tenant-certificate', 'list-site-aliases', 'add-site-aliases'.
2359
+ - **Deployments:** 'deploy-site', 'list-deployments', 'get-deployment-log', 'get-deploy-script', 'update-deploy-script', 'get-site-repository', 'install-site-repository', 'toggle-quick-deploy'.
2360
+ - **Databases:** 'list-databases', 'get-database', 'create-database', 'duplicate-database', 'acknowledge-database', 'list-database-users', 'create-database-user', 'attach-database-user', 'reset-database-user-password'.
2361
+ - **Cronjobs, certificates, daemons/queues, firewall, insights:** 'list-cronjobs', 'create-cronjob'; 'list-certificates', 'request-certificate'; 'list-daemons', 'restart-daemon', 'list-site-queues', 'restart-site-queue'; 'list-firewall-rules', 'create-firewall-rule'; 'list-server-insights', 'get-server-insight', 'fix-server-insight', 'ignore-server-insight', 'delete-server-insight'.
2362
+
2363
+ Source: [Ploi MCP documentation](https://developers.ploi.io/getting-started/mcp). The page also warns that 'get-site-env' returns raw '.env' contents, which may contain secrets.
2364
+
2365
+ ## Coverage validation
2366
+
2367
+ - [x] Sitemap-derived endpoint page set downloaded and checked: 224 resource URLs plus the Teapot endpoint, excluding one non-endpoint type catalogue from operation coverage.
2368
+ - [x] All 224 endpoint pages have at least one documented route; the custom-server page has two operation sections, yielding 225 operations and 226 route forms when the Horizon endpoint's optional `/{type}` form is counted.
2369
+ - [x] Every operation below records method, path, path parameters, request fields, pagination status, response shape/notes, logical CLI name, and a precise endpoint-page citation.
2370
+ - [x] Current repository terminology and implementation status checked against 'src/cli.mjs' and 'src/providers/ploi.mjs'; existing working-tree changes were not touched.
2371
+ - [x] No live Ploi mutation was attempted.