List site-manager jobs
const url = 'https://example.com/wp-json/wp2/site-manager/v1/jobs?type=site_manager.&limit=20';const options = {method: 'GET', headers: {'X-WP-Nonce': '<X-WP-Nonce>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://example.com/wp-json/wp2/site-manager/v1/jobs?type=site_manager.&limit=20' \ --header 'X-WP-Nonce: <X-WP-Nonce>'Current user’s jobs with type prefix site_manager. (duplicates and bulk). A super admin does not see others’ jobs here — list_for_user filters by user_id.
Requires manage_network or manage_options.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Filter by job status (pending, running, completed, failed, cancelled). Empty — all statuses.
Type prefix (str_starts_with). Default site_manager. — all module jobs. Narrow with e.g. site_manager.bulk.
Max jobs in items. PHP: max(1, min(100, limit ?: 20)).
Responses
Section titled “Responses”Object with an items array (not a bare array).
object
Current user’s Site Manager jobs, newer closer to the start of the index.
object
Job UUID (PlatformJob::$job_id). Site Manager GET returns 404 job_not_found if the type does not start with site_manager. or the row is missing.
Machine job type. Site Manager: site_manager.create_from_source, site_manager.bulk. Site Duplicator uses its own prefixes of the same PlatformJob.
Lifecycle status (pending / running / completed / failed; PHP may also return cancelled as terminal).
Current worker phase (short progress label, e.g. bulk), not an HTTP status.
Progress counters (percent / current / total) as the worker stored them in PlatformJob::$progress.
object
Percent complete 0–100, if the worker writes it.
How many units have been processed.
How many units in total (e.g. number of blog_ids in bulk).
Human-readable worker status (not a PIN and not a WP-CLI log).
Who enqueued the job. GET of another user’s job without manage_network — 403 forbidden. The jobs list returns only the current user’s jobs.
Network where the job was created. Another network — 404 job_not_in_network (message “Job not found.”).
Worker input (for bulk — blog_ids/action/patch/drop_tables; for create_from_source — source_blog_id and new-site fields).
object
Result after completed (for bulk — succeeded/failed/total/processed). null until the job finishes successfully.
object
Error on failed. PHP stores {code, message} in PlatformJob::$error; null if it did not fail.
Job created time (GMT, gmdate('c')).
Last progress/status update time.
Time of transition to a terminal status; null while the job is running.
Example
{ "items": [ { "job_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "type": "site_manager.bulk", "status": "pending", "phase": "", "message": "", "user_id": 1, "network_id": 1 } ]}Not authenticated. DualRest: rest_forbidden (status 401) when there is no cookie session. Cookie + X-WP-Nonce or Application Password.
object
Machine-readable error or event code.
Message text (log, PIN, or password reset).
Extra WP_Error or license payload.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}Missing manage_network/manage_options or invalid REST nonce.
object
Machine-readable error or event code.
Message text (log, PIN, or password reset).
Extra WP_Error or license payload.
object
Examplegenerated
{ "code": "example", "message": "example", "data": {}}