> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://api.docs.modulards.com/modular-ds-public-api/tasks/website-tasks/update-a-task/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 task
PATCH https://api.modulards.com/api/public/v1/site-tasks/{siteTask}
Content-Type: application/json
Changes the fields you send on one task and leaves the others as they are. The id in the path is the task id.
Your role must be allowed to edit tasks; without it the request answers 404.
**Body**
* `title` (string, optional): at most 255 characters, not blank.
* `date` (string, optional): `YYYY-MM-DD`.
* `content` (string or `null`, optional): HTML, cleaned on the server, at most 2500 characters once tags are stripped.
* `time_spent` (number or `null`, optional): minutes spent, decimals allowed, 0 or more.
* `is_pending` (boolean, optional): whether the task is still pending.
* `files` (array, optional): up to 4 entries of `{uuid, name}`. Leaving `files` out keeps the attachments; sending `[]` removes all of them. When you send it, the list replaces the whole set: new uploads from "Upload a file" are attached, ids already on this task are kept and reordered, and everything else is removed.
**Errors**
* **422**: a `files.*.uuid` is unknown or was not uploaded by you, `title` is blank or `date` is invalid.
Reference: https://api.docs.modulards.com/modular-ds-public-api/tasks/website-tasks/update-a-task
## 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
- `siteTask` (string, required)
### Body (application/json)
This endpoint expects an object.
- `is_pending` (boolean, optional)
- `title` (string, optional)
## Response
### 200
200 OK
- `data` (ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaData, optional)
- `jsonapi` (ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaJsonapi, optional)
## Types
### ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaData
- `attributes` (ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaDataAttributes, optional)
- `id` (string, optional)
- `links` (ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaDataLinks, optional)
- `type` (string, optional)
### ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaJsonapi
- `version` (string, optional)
### ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaDataAttributes
- `content` (string, optional)
- `created_at` (string, optional)
- `date` (string, optional)
- `is_pending` (boolean, optional)
- `site_id` (double, optional)
- `time_spent` (double, optional)
- `title` (string, optional)
- `updated_at` (string, optional)
### ApiPublicV1SiteTasksSiteTaskPatchResponsesContentApplicationJsonSchemaDataLinks
- `self` (string, optional)
## Examples
### 200 OK
**Response**
```json
{
"data": {
"attributes": {
"content": "
Renewed the certificate through the hosting panel.
",
"created_at": "2026-09-17T09:00:00.000000Z",
"date": "2026-09-17",
"is_pending": false,
"site_id": 12,
"time_spent": 30,
"title": "Renew the SSL certificate (done)",
"updated_at": "2026-09-17T09:05:00.000000Z"
},
"id": "501",
"links": {
"self": "{{base_url}}/api/public/v1/site-tasks/501"
},
"type": "site-tasks"
},
"jsonapi": {
"version": "1.1"
}
}
```
**SDK Code**
```python 200 OK
import requests
url = "https://api.modulards.com/api/public/v1/site-tasks/siteTask"
headers = {"Authorization": "Bearer "}
response = requests.patch(url, headers=headers)
print(response.json())
```
```javascript 200 OK
const url = 'https://api.modulards.com/api/public/v1/site-tasks/siteTask';
const options = {method: 'PATCH', headers: {Authorization: 'Bearer '}};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
```
```go 200 OK
package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.modulards.com/api/public/v1/site-tasks/siteTask"
req, _ := http.NewRequest("PATCH", url, nil)
req.Header.Add("Authorization", "Bearer ")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
```
```ruby 200 OK
require 'uri'
require 'net/http'
url = URI("https://api.modulards.com/api/public/v1/site-tasks/siteTask")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer '
response = http.request(request)
puts response.read_body
```
```java 200 OK
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.patch("https://api.modulards.com/api/public/v1/site-tasks/siteTask")
.header("Authorization", "Bearer ")
.asString();
```
```php 200 OK
request('PATCH', 'https://api.modulards.com/api/public/v1/site-tasks/siteTask', [
'headers' => [
'Authorization' => 'Bearer ',
],
]);
echo $response->getBody();
```
```csharp 200 OK
using RestSharp;
var client = new RestClient("https://api.modulards.com/api/public/v1/site-tasks/siteTask");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer ");
IRestResponse response = client.Execute(request);
```
```swift 200 OK
import Foundation
let headers = ["Authorization": "Bearer "]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/site-tasks/siteTask")! 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 task
**Request**
```json
{
"is_pending": false,
"title": "Renew the SSL certificate (done)"
}
```
**Response**
```json
{
"data": {
"attributes": {
"content": "Renewed the certificate through the hosting panel.
",
"created_at": "2026-09-17T09:00:00.000000Z",
"date": "2026-09-17",
"is_pending": false,
"site_id": 12,
"time_spent": 30,
"title": "Renew the SSL certificate (done)",
"updated_at": "2026-09-17T09:05:00.000000Z"
},
"id": "501",
"links": {
"self": "{{base_url}}/api/public/v1/site-tasks/501"
},
"type": "site-tasks"
},
"jsonapi": {
"version": "1.1"
}
}
```
**SDK Code**
```python Update a task
import requests
url = "https://api.modulards.com/api/public/v1/site-tasks/siteTask"
payload = {
"is_pending": False,
"title": "Renew the SSL certificate (done)"
}
headers = {
"Authorization": "Bearer ",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.json())
```
```javascript Update a task
const url = 'https://api.modulards.com/api/public/v1/site-tasks/siteTask';
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'},
body: '{"is_pending":false,"title":"Renew the SSL certificate (done)"}'
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
```
```go Update a task
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.modulards.com/api/public/v1/site-tasks/siteTask"
payload := strings.NewReader("{\n \"is_pending\": false,\n \"title\": \"Renew the SSL certificate (done)\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer ")
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 task
require 'uri'
require 'net/http'
url = URI("https://api.modulards.com/api/public/v1/site-tasks/siteTask")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer '
request["Content-Type"] = 'application/json'
request.body = "{\n \"is_pending\": false,\n \"title\": \"Renew the SSL certificate (done)\"\n}"
response = http.request(request)
puts response.read_body
```
```java Update a task
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
HttpResponse response = Unirest.patch("https://api.modulards.com/api/public/v1/site-tasks/siteTask")
.header("Authorization", "Bearer ")
.header("Content-Type", "application/json")
.body("{\n \"is_pending\": false,\n \"title\": \"Renew the SSL certificate (done)\"\n}")
.asString();
```
```php Update a task
request('PATCH', 'https://api.modulards.com/api/public/v1/site-tasks/siteTask', [
'body' => '{
"is_pending": false,
"title": "Renew the SSL certificate (done)"
}',
'headers' => [
'Authorization' => 'Bearer ',
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();
```
```csharp Update a task
using RestSharp;
var client = new RestClient("https://api.modulards.com/api/public/v1/site-tasks/siteTask");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Authorization", "Bearer ");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"is_pending\": false,\n \"title\": \"Renew the SSL certificate (done)\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```
```swift Update a task
import Foundation
let headers = [
"Authorization": "Bearer ",
"Content-Type": "application/json"
]
let parameters = [
"is_pending": false,
"title": "Renew the SSL certificate (done)"
] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/site-tasks/siteTask")! 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()
```