> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://api.docs.modulards.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.docs.modulards.com/_mcp/server.

# Update a website's maintenance mode

PATCH https://api.modulards.com/api/public/v1/sites/{site}/maintenance
Content-Type: application/json

Turns a website's WordPress maintenance mode on or off and customizes the page visitors see while it is on. Send only the fields you want to change.

The change reaches WordPress through the Modular Connector plugin a moment later: the answer confirms the request was stored and queued, not that the website has already switched. While maintenance mode is on the website's connection status is `maintaining`; turning it off also re-verifies the connection in the background. Returns the same document as "Retrieve a website's maintenance mode settings".

The four customization fields depend on your plan: an organization whose plan does not include them can still change `status`.

**Body**
- `status` (`enabled` or `disabled`, optional): turns maintenance mode on or off.
- `noindex` (boolean, optional): whether search engines are told not to index the maintenance page.
- `background` (string, optional): a hex color for the page background.
- `title` (string, optional): the page title, at most 70 characters.
- `description` (string, optional): the message shown to visitors, at most 250 characters.

**Errors**
- **422**: `noindex`, `background`, `title` or `description` is sent while your plan does not include them.

Reference: https://api.docs.modulards.com/modular-ds-public-api/websites/maintenance/update-a-website-s-maintenance-mode

## Authentication

- `Authorization` header (bearer token, required) — Personal access token created in the Modular DS dashboard; read-only tokens can only call GET endpoints.

## Request

### Path parameters

- `site` (string, required)

### Body (application/json)

This endpoint expects an object.

- `background` (string, optional)
- `description` (string, optional)
- `noindex` (boolean, optional)
- `status` (string, optional)
- `title` (string, optional)

## Response

### 200

200 - Maintenance updated

- `data` (ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaData, optional)
- `jsonapi` (ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaJsonapi, optional)

## Types

### ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaData

- `attributes` (ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaDataAttributes, optional)
- `id` (string, optional)
- `links` (ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaDataLinks, optional)
- `type` (string, optional)

### ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaJsonapi

- `version` (string, optional)

### ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaDataAttributes

- `connection_status` (string, optional)
- `connector_version` (string, optional)
- `core_version` (string, optional)
- `created_at` (string, optional)
- `created_by` (double, optional)
- `db_engine` (string, optional)
- `db_engine_version` (string, optional)
- `deleted_at` (any, optional, nullable)
- `display_host` (string, optional)
- `ecommerce_engine` (string, optional)
- `ecommerce_version` (string, optional)
- `engine` (string, optional)
- `engine_version` (string, optional)
- `host` (string, optional)
- `is_connected` (boolean, optional)
- `is_main_site` (boolean, optional)
- `is_multisite` (boolean, optional)
- `locale` (string, optional)
- `maintenance_background` (string, optional)
- `maintenance_description` (string, optional)
- `maintenance_noindex` (boolean, optional)
- `maintenance_status` (string, optional)
- `maintenance_title` (string, optional)
- `name` (string, optional)
- `path` (any, optional, nullable)
- `provider` (string, optional)
- `scheme` (string, optional)
- `slug` (string, optional)
- `synced_at` (string, optional)
- `timezone` (string, optional)
- `updated_at` (string, optional)
- `uri` (string, optional)

### ApiPublicV1SitesSiteMaintenancePatchResponsesContentApplicationJsonSchemaDataLinks

- `self` (string, optional)

## Examples

### 200 - Maintenance updated

**Response**

```json
{
  "data": {
    "attributes": {
      "connection_status": "established",
      "connector_version": "3.4.2",
      "core_version": "6.6.2",
      "created_at": "2026-01-14T09:30:00.000000Z",
      "created_by": 42,
      "db_engine": "mysql",
      "db_engine_version": "8.0.36",
      "deleted_at": null,
      "display_host": "acme-corp.com",
      "ecommerce_engine": "woocommerce",
      "ecommerce_version": "9.2.3",
      "engine": "php",
      "engine_version": "8.3.10",
      "host": "acme-corp.com",
      "is_connected": true,
      "is_main_site": true,
      "is_multisite": false,
      "locale": "en_US",
      "maintenance_background": "#1a1a2e",
      "maintenance_description": "Scheduled maintenance in progress.",
      "maintenance_noindex": true,
      "maintenance_status": "enabled",
      "maintenance_title": "We will be right back",
      "name": "Acme Corp",
      "path": null,
      "provider": "wp",
      "scheme": "https",
      "slug": "acme-corp",
      "synced_at": "2026-09-16T08:12:00.000000Z",
      "timezone": "Europe/Madrid",
      "updated_at": "2026-09-21T09:35:00.000000Z",
      "uri": "https://acme-corp.com"
    },
    "id": "101",
    "links": {
      "self": "https://api.modulards.com/api/public/v1/sites/101"
    },
    "type": "sites"
  },
  "jsonapi": {
    "version": "1.1"
  }
}
```

**SDK Code**

```python 200 - Maintenance updated
import requests

url = "https://api.modulards.com/api/public/v1/sites/site/maintenance"

headers = {"Authorization": "Bearer <token>"}

response = requests.patch(url, headers=headers)

print(response.json())
```

```javascript 200 - Maintenance updated
const url = 'https://api.modulards.com/api/public/v1/sites/site/maintenance';
const options = {method: 'PATCH', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go 200 - Maintenance updated
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.modulards.com/api/public/v1/sites/site/maintenance"

	req, _ := http.NewRequest("PATCH", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby 200 - Maintenance updated
require 'uri'
require 'net/http'

url = URI("https://api.modulards.com/api/public/v1/sites/site/maintenance")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java 200 - Maintenance updated
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.patch("https://api.modulards.com/api/public/v1/sites/site/maintenance")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php 200 - Maintenance updated
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://api.modulards.com/api/public/v1/sites/site/maintenance', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp 200 - Maintenance updated
using RestSharp;

var client = new RestClient("https://api.modulards.com/api/public/v1/sites/site/maintenance");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift 200 - Maintenance updated
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/sites/site/maintenance")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Update a website's maintenance mode

**Request**

```json
{
  "background": "#1a1a2e",
  "description": "Scheduled maintenance in progress.",
  "noindex": true,
  "status": "enabled",
  "title": "We will be right back"
}
```

**Response**

```json
{
  "data": {
    "attributes": {
      "connection_status": "established",
      "connector_version": "3.4.2",
      "core_version": "6.6.2",
      "created_at": "2026-01-14T09:30:00.000000Z",
      "created_by": 42,
      "db_engine": "mysql",
      "db_engine_version": "8.0.36",
      "deleted_at": null,
      "display_host": "acme-corp.com",
      "ecommerce_engine": "woocommerce",
      "ecommerce_version": "9.2.3",
      "engine": "php",
      "engine_version": "8.3.10",
      "host": "acme-corp.com",
      "is_connected": true,
      "is_main_site": true,
      "is_multisite": false,
      "locale": "en_US",
      "maintenance_background": "#1a1a2e",
      "maintenance_description": "Scheduled maintenance in progress.",
      "maintenance_noindex": true,
      "maintenance_status": "enabled",
      "maintenance_title": "We will be right back",
      "name": "Acme Corp",
      "path": null,
      "provider": "wp",
      "scheme": "https",
      "slug": "acme-corp",
      "synced_at": "2026-09-16T08:12:00.000000Z",
      "timezone": "Europe/Madrid",
      "updated_at": "2026-09-21T09:35:00.000000Z",
      "uri": "https://acme-corp.com"
    },
    "id": "101",
    "links": {
      "self": "https://api.modulards.com/api/public/v1/sites/101"
    },
    "type": "sites"
  },
  "jsonapi": {
    "version": "1.1"
  }
}
```

**SDK Code**

```python Update a website's maintenance mode
import requests

url = "https://api.modulards.com/api/public/v1/sites/site/maintenance"

payload = {
    "background": "#1a1a2e",
    "description": "Scheduled maintenance in progress.",
    "noindex": True,
    "status": "enabled",
    "title": "We will be right back"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.patch(url, json=payload, headers=headers)

print(response.json())
```

```javascript Update a website's maintenance mode
const url = 'https://api.modulards.com/api/public/v1/sites/site/maintenance';
const options = {
  method: 'PATCH',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"background":"#1a1a2e","description":"Scheduled maintenance in progress.","noindex":true,"status":"enabled","title":"We will be right back"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Update a website's maintenance mode
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.modulards.com/api/public/v1/sites/site/maintenance"

	payload := strings.NewReader("{\n  \"background\": \"#1a1a2e\",\n  \"description\": \"Scheduled maintenance in progress.\",\n  \"noindex\": true,\n  \"status\": \"enabled\",\n  \"title\": \"We will be right back\"\n}")

	req, _ := http.NewRequest("PATCH", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Update a website's maintenance mode
require 'uri'
require 'net/http'

url = URI("https://api.modulards.com/api/public/v1/sites/site/maintenance")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"background\": \"#1a1a2e\",\n  \"description\": \"Scheduled maintenance in progress.\",\n  \"noindex\": true,\n  \"status\": \"enabled\",\n  \"title\": \"We will be right back\"\n}"

response = http.request(request)
puts response.read_body
```

```java Update a website's maintenance mode
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.patch("https://api.modulards.com/api/public/v1/sites/site/maintenance")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"background\": \"#1a1a2e\",\n  \"description\": \"Scheduled maintenance in progress.\",\n  \"noindex\": true,\n  \"status\": \"enabled\",\n  \"title\": \"We will be right back\"\n}")
  .asString();
```

```php Update a website's maintenance mode
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://api.modulards.com/api/public/v1/sites/site/maintenance', [
  'body' => '{
  "background": "#1a1a2e",
  "description": "Scheduled maintenance in progress.",
  "noindex": true,
  "status": "enabled",
  "title": "We will be right back"
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Update a website's maintenance mode
using RestSharp;

var client = new RestClient("https://api.modulards.com/api/public/v1/sites/site/maintenance");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"background\": \"#1a1a2e\",\n  \"description\": \"Scheduled maintenance in progress.\",\n  \"noindex\": true,\n  \"status\": \"enabled\",\n  \"title\": \"We will be right back\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Update a website's maintenance mode
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "background": "#1a1a2e",
  "description": "Scheduled maintenance in progress.",
  "noindex": true,
  "status": "enabled",
  "title": "We will be right back"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/sites/site/maintenance")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```