Skip to main content
Use these endpoints to manage child sites in MainWP Dashboard.
Use the MainWP Postman collection as the source of truth for request and response schemas.
{id_or_domain} accepts either a numeric site ID or a site domain.

Route Matrix

Global Site Routes

MethodPathPurposeKey Params
GET/sitesList sitespage, per_page, search, include, exclude, status, with_tags, full_data
GET/sites/basicList lightweight site recordspage, per_page, search, include, exclude, status
GET/sites/countCount sitesinclude, exclude, status
POST, PUT, PATCH/sites/syncTrigger sync for all sitesOptional filters like include, exclude
POST, PUT, PATCH/sites/reconnectTrigger reconnect for all sitesOptional filters
POST, PUT, PATCH/sites/disconnectDisconnect all matched sitesOptional filters
POST, PUT, PATCH/sites/checkRun connection checks for all sitesOptional filters
POST/sites/addAdd a child siteurl, name, admin, optional groupids, client_id
POST/sites/batchBatch create/update/delete sitescreate[], update[], delete[] payload

Per-Site Routes

MethodPathPurposeKey Params
GET/sites/{id_or_domain}Get full site detailsid_or_domain, optional with_tags
POST, PUT, PATCH/sites/{id_or_domain}/editUpdate site fieldsname, groupids, client_id, other editable site fields
POST, PUT, PATCH/sites/{id_or_domain}/syncSync one siteid_or_domain
GET/sites/{id_or_domain}/securityFetch security snapshotid_or_domain
GET/sites/{id_or_domain}/pluginsList plugins on one sitestatus, search, page, per_page, must_use
POST, PUT, PATCH/sites/{id_or_domain}/plugins/activateActivate plugin(s)slug (single or comma list)
POST, PUT, PATCH/sites/{id_or_domain}/plugins/deactivateDeactivate plugin(s)slug
DELETE/sites/{id_or_domain}/plugins/deleteDelete plugin(s)slug
GET/sites/{id_or_domain}/plugins/abandonedList abandoned pluginsStandard list filters
GET/sites/{id_or_domain}/themesList themes on one sitestatus, search, page, per_page
POST, PUT, PATCH/sites/{id_or_domain}/themes/activateActivate a themeslug
DELETE/sites/{id_or_domain}/themes/deleteDelete theme(s)slug
GET/sites/{id_or_domain}/themes/abandonedList abandoned themesStandard list filters
GET/sites/{id_or_domain}/non-mainwp-changesShow external/non-MainWP changesid_or_domain, optional source, actions, contexts, total_count, page, per_page
POST, PUT, PATCH/sites/{id_or_domain}/reconnectReconnect one siteid_or_domain
POST, PUT, PATCH/sites/{id_or_domain}/disconnectDisconnect one siteid_or_domain
POST, PUT, PATCH/sites/{id_or_domain}/suspendSuspend one siteid_or_domain
POST, PUT, PATCH/sites/{id_or_domain}/unsuspendUnsuspend one siteid_or_domain
POST, PUT, PATCH/sites/{id_or_domain}/checkRun check for one siteid_or_domain
DELETE/sites/{id_or_domain}/removeRemove site from Dashboardid_or_domain

Site Relationship Routes

MethodPathPurposeKey Params
GET/sites/{id_or_domain}/clientGet client linked to a siteid_or_domain
GET/sites/{id_or_domain}/costsGet costs linked to a siteid_or_domain

Representative Requests

List sites

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://your-dashboard.com/wp-json/mainwp/v2/sites?page=1&per_page=20&status=connected"
{
  "success": 1,
  "total": 2,
  "data": [
    {
      "id": 12,
      "name": "Example Site",
      "url": "https://example.com",
      "status": "connected"
    }
  ]
}

Activate a plugin on one site

curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"akismet/akismet.php"}' \
  "https://your-dashboard.com/wp-json/mainwp/v2/sites/12/plugins/activate"
{
  "success": 1,
  "message": "Plugin activated successfully."
}

Batch site operations

curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "create": [{"url":"https://new-site.com","name":"New Site","admin":"admin"}],
    "update": [{"id":12,"name":"Renamed Site"}],
    "delete": [31]
  }' \
  "https://your-dashboard.com/wp-json/mainwp/v2/sites/batch"
{
  "create": [{"success": 1}],
  "update": [{"success": 1}],
  "delete": [{"success": 1}]
}