> 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.

# List tasks

GET https://api.modulards.com/api/public/v1/site-tasks

Lists the tasks logged on the websites your token can reach, newest first. Use it to review the work done on a website over a period, for example with `filter[site][]` and a date range, or to find the tasks that are still pending.

Each task belongs to one website. To see the website or the attachments in the same answer, add them with `include`.

Reference: https://api.docs.modulards.com/modular-ds-public-api/tasks/website-tasks/list-tasks

## Authentication

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

## Request

### Query parameters

- `filter[id][]` (string, optional) — Only these tasks, by task id. Several ids match any of them.
- `filter[site][]` (string, optional) — Only the tasks of these websites, by website id. Several ids match any of them. Every website your token can reach when omitted.
- `filter[s]` (string, optional) — Free-text search over the title, the content and the time spent.
- `filter[started_at]` (string, optional) — First day to include, as `YYYY-MM-DD`: tasks whose date is on or after it.
- `filter[ended_at]` (string, optional) — Last day to include, as `YYYY-MM-DD`: tasks whose date is on or before it.
- `filter[is_pending]` (string, optional) — `1` for only the pending tasks, `0` for only the finished ones.
- `include` (string, optional) — Related data to return with each task. Accepted: `site` (the website) and `files` (the task's attachments). Separate several with commas.
- `sort` (string, optional) — Sort order. Accepted: `created_at`, `date`; a leading `-` reverses the order. Default `-created_at`, the most recently created first.
- `page[number]` (string, optional) — Page number, starting at 1.
- `page[size]` (string, optional) — Rows per page, up to 50 (default 15).

## Response

### 200

200 OK

- `data` (list of ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaDataItems, optional)
- `jsonapi` (ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaJsonapi, optional)
- `links` (ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaLinks, optional)
- `meta` (ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaMeta, optional)

## Types

### ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaDataItems

- `attributes` (ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaDataItemsAttributes, optional)
- `id` (string, optional)
- `links` (ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaDataItemsLinks, optional)
- `type` (string, optional)

### ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaJsonapi

- `version` (string, optional)

### ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaLinks

- `first` (string, optional)
- `last` (string, optional)
- `next` (any, optional, nullable)
- `prev` (any, optional, nullable)

### ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaMeta

- `current_page` (double, optional)
- `from` (double, optional)
- `last_page` (double, optional)
- `links` (list of ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaMetaLinksItems, optional)
- `path` (string, optional)
- `per_page` (double, optional)
- `to` (double, optional)
- `total` (double, optional)

### ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaDataItemsAttributes

- `content` (string, optional, nullable)
- `created_at` (string, optional)
- `date` (string, optional)
- `is_pending` (boolean, optional)
- `site_id` (double, optional)
- `time_spent` (double, optional, nullable)
- `title` (string, optional)
- `updated_at` (string, optional)

### ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaDataItemsLinks

- `self` (string, optional)

### ApiPublicV1SiteTasksGetResponsesContentApplicationJsonSchemaMetaLinksItems

- `active` (boolean, optional)
- `label` (string, optional)
- `url` (string, optional, nullable)

## Examples

**Response**

```json
{
  "data": [
    {
      "attributes": {
        "content": "<p>Renewed the certificate through the hosting panel.</p>",
        "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",
        "updated_at": "2026-09-17T09:00:00.000000Z"
      },
      "id": "501",
      "links": {
        "self": "{{base_url}}/api/public/v1/site-tasks/501"
      },
      "type": "site-tasks"
    },
    {
      "attributes": {
        "content": null,
        "created_at": "2026-09-15T14:20:00.000000Z",
        "date": "2026-09-15",
        "is_pending": true,
        "site_id": 13,
        "time_spent": null,
        "title": "Update the caching plugin",
        "updated_at": "2026-09-15T14:20:00.000000Z"
      },
      "id": "487",
      "links": {
        "self": "{{base_url}}/api/public/v1/site-tasks/487"
      },
      "type": "site-tasks"
    }
  ],
  "jsonapi": {
    "version": "1.1"
  },
  "links": {
    "first": "{{base_url}}/api/public/v1/site-tasks?page%5Bnumber%5D=1",
    "last": "{{base_url}}/api/public/v1/site-tasks?page%5Bnumber%5D=1",
    "next": null,
    "prev": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      {
        "active": false,
        "label": "&laquo; Previous",
        "url": null
      },
      {
        "active": true,
        "label": "1",
        "url": "{{base_url}}/api/public/v1/site-tasks?page%5Bnumber%5D=1"
      },
      {
        "active": false,
        "label": "Next &raquo;",
        "url": null
      }
    ],
    "path": "{{base_url}}/api/public/v1/site-tasks",
    "per_page": 15,
    "to": 2,
    "total": 2
  }
}
```

**SDK Code**

```python 200 OK
import requests

url = "https://api.modulards.com/api/public/v1/site-tasks"

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

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

print(response.json())
```

```javascript 200 OK
const url = 'https://api.modulards.com/api/public/v1/site-tasks';
const options = {method: 'GET', 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 OK
package main

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

func main() {

	url := "https://api.modulards.com/api/public/v1/site-tasks"

	req, _ := http.NewRequest("GET", 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 OK
require 'uri'
require 'net/http'

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

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

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

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

```java 200 OK
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

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

```php 200 OK
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

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

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

```csharp 200 OK
using RestSharp;

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

```swift 200 OK
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/site-tasks")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
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()
```