Manage child sites connected to your MainWP Dashboard through these endpoints.
What You’ll Learn
- Site listing and filtering endpoints
- Adding, editing, and removing sites
- Syncing and connectivity checks
- Plugin and theme management per site
GET /sites/
Returns basic information for all child sites with pagination support.
Method: GET (readonly)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/?per_page=20"
Parameters
| Name | Type | Required | Default | Description |
|---|
page | integer | No | 1 | Page number |
per_page | integer | No | 10 | Items per page |
search | string | No | — | Search in site name and URL |
include | string | No | — | Comma-separated site IDs to include |
exclude | string | No | — | Comma-separated site IDs to exclude |
status | string | No | any | Filter: any, connected, disconnected, suspended, available_update |
Response
[
{
"id": 1,
"url": "https://example.com",
"name": "My Site",
"status": "connected",
"wp_version": "6.4.2",
"php_version": "8.2",
"last_sync": "2024-01-15T10:30:00"
}
]
GET /sites/
Returns detailed information about a specific child site.
Method: GET (readonly)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
Response
{
"id": 1,
"url": "https://example.com",
"name": "My Site",
"status": "connected",
"wp_version": "6.4.2",
"php_version": "8.2",
"mysql_version": "8.0",
"admin_email": "[email protected]",
"plugins_count": 15,
"themes_count": 3,
"last_sync": "2024-01-15T10:30:00",
"health_score": 85
}
PUT /sites/add
Adds a new child site to the Dashboard.
Method: PUT
curl -X PUT \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "name": "My Site", "admin": "admin"}' \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/add"
Parameters
| Name | Type | Required | Description |
|---|
url | string | Yes | Child site URL (must have MainWP Child plugin active) |
name | string | Yes | Display name for the site |
admin | string | Yes | Admin username on the child site |
groupids | string | No | Comma-separated tag/group IDs |
client_id | integer | No | Client ID to associate site with |
Response
{
"id": 5,
"url": "https://example.com",
"name": "My Site",
"status": "connected",
"message": "Site added successfully"
}
PUT /sites//edit
Updates a site’s properties.
Method: PUT
curl -X PUT \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/edit?name=Updated%20Name"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
name | string | No | New display name |
groupids | string | No | Comma-separated tag IDs |
client_id | integer | No | New client ID |
Response
{
"id": 1,
"name": "Updated Name",
"message": "Site updated successfully"
}
DELETE /sites/
Removes a child site from the Dashboard.
Method: DELETE
This action is destructive and cannot be undone. The child site itself is not affected, only the Dashboard connection.
curl -X DELETE \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
Response
{
"success": true,
"message": "Site removed successfully"
}
POST /sites/sync
Triggers synchronization for all sites. Responds immediately; sync runs in the background.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/sync"
Parameters
| Name | Type | Required | Description |
|---|
include | string | No | Only sync these site IDs |
exclude | string | No | Skip these site IDs |
Response
{
"success": 1,
"message": "Sync initiated for all sites"
}
POST /sites//sync
Syncs a specific child site.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/sync"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
Response
{
"id": 1,
"url": "https://example.com",
"status": "connected",
"last_sync": "2024-01-15T10:30:00",
"message": "Site synced successfully"
}
POST /sites/check
Runs connectivity checks for all sites.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/check"
Parameters
| Name | Type | Required | Description |
|---|
include | string | No | Only check these site IDs |
exclude | string | No | Skip these site IDs |
Response
{
"success": 1,
"message": "Check initiated for all sites"
}
GET /sites//plugins
Returns plugins installed on a child site.
Method: GET (readonly)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/plugins"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
page | integer | No | Page number |
per_page | integer | No | Items per page |
search | string | No | Search plugin names |
status | string | No | Filter: active, inactive, update_available |
must_use | integer | No | Set to 1 for MU plugins only |
Response
[
{
"name": "Akismet Anti-spam",
"slug": "akismet/akismet.php",
"version": "5.3",
"status": "active",
"update_available": false
}
]
POST /sites//plugins/activate
Activates a plugin on a child site.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/plugins/activate?slug=akismet/akismet.php"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
slug | string | Yes | Plugin slug (e.g., akismet/akismet.php) |
Response
{
"success": true,
"plugin": "akismet/akismet.php",
"status": "active",
"message": "Plugin activated successfully"
}
POST /sites//plugins/deactivate
Deactivates a plugin on a child site.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/plugins/deactivate?slug=akismet/akismet.php"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
slug | string | Yes | Plugin slug |
Response
{
"success": true,
"plugin": "akismet/akismet.php",
"status": "inactive",
"message": "Plugin deactivated successfully"
}
GET /sites//themes
Returns themes installed on a child site.
Method: GET (readonly)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/themes"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
page | integer | No | Page number |
per_page | integer | No | Items per page |
search | string | No | Search theme names |
status | string | No | Filter: active, inactive, update_available |
Response
[
{
"name": "Twenty Twenty-Four",
"slug": "twentytwentyfour",
"version": "1.0",
"status": "active",
"update_available": false
}
]
POST /sites//themes/activate
Activates a theme on a child site.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/themes/activate?slug=twentytwentyfour"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
slug | string | Yes | Theme slug |
Response
{
"success": true,
"theme": "twentytwentyfour",
"status": "active",
"message": "Theme activated successfully"
}
GET /sites//non-mainwp-changes
Returns changes made to the site outside of MainWP.
Method: GET (readonly)
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/non-mainwp-changes"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
Response
{
"plugins_installed": ["hello-dolly/hello.php"],
"plugins_updated": [],
"themes_installed": [],
"themes_updated": [],
"core_updated": false
}
POST /sites//reconnect
Attempts to reconnect a disconnected child site.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/reconnect"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
Response
{
"id": 1,
"url": "https://example.com",
"status": "connected",
"message": "Site reconnected successfully"
}
POST /sites//suspend
Suspends a child site, preventing sync and updates.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/suspend"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
Response
{
"id": 1,
"status": "suspended",
"message": "Site suspended successfully"
}
POST /sites//unsuspend
Removes suspension from a child site.
Method: POST
curl -X POST \
-H "Authorization: Bearer YOUR_API_KEY" \
"https://your-dashboard.com/wp-json/mainwp/v2/sites/1/unsuspend"
Parameters
| Name | Type | Required | Description |
|---|
site | integer/string | Yes | Site ID or domain |
Response
{
"id": 1,
"status": "connected",
"message": "Site unsuspended successfully"
}