> 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/clients/manage-clients/list-clients/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.docs.modulards.com/_mcp/server. # List clients GET https://api.modulards.com/api/public/v1/clients Lists the clients you can reach. Use it to find a client by name or company, to see which clients have a given website, or to build a directory of your customers. By default clients come sorted by name. You can also get each client's number of websites, which counts only the websites your token can reach, and add the client's contact methods or websites to the answer with `include`. Reference: https://api.docs.modulards.com/modular-ds-public-api/clients/manage-clients/list-clients ## 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 - `page[number]` (string, optional) — Page number, starting at 1. - `page[size]` (string, optional) — Rows per page, up to 50 (default 15). - `sort` (string, optional) — Sort order. Accepted: `name`, `last_name`, `company`, `created_at`, `sites_count`; a leading `-` reverses the order. Default `name`, ascending. - `include` (string, optional) — Related data to return with each client. Accepted: `contact_methods` and `sites`. Separate several with commas. - `fields[clients]` (string, optional) — Limits the attributes returned. `sites_count`, the number of websites your token can reach, is only returned when you name it here or sort by it. - `filter[id][]` (string, optional) — Only these clients, by client id. Several ids match any of them. - `filter[s]` (string, optional) — Free-text search over the name, the last name and the company. - `filter[sites][]` (string, optional) — Only the clients assigned to these websites, by website id. Several ids match any of them. - `filter[channel]` (string, optional) — Only the clients that have a contact method on this channel: `email` or `phone`. ## Response ### 200 200 - Clients - `data` (list of ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaDataItems, optional) - `jsonapi` (ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaJsonapi, optional) - `links` (ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaLinks, optional) - `meta` (ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaMeta, optional) ## Types ### ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaDataItems - `attributes` (ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaDataItemsAttributes, optional) - `id` (string, optional) - `links` (ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaDataItemsLinks, optional) - `type` (string, optional) ### ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaJsonapi - `version` (string, optional) ### ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaLinks - `first` (string, optional) - `last` (string, optional) - `next` (any, optional, nullable) - `prev` (any, optional, nullable) ### ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaMeta - `current_page` (double, optional) - `from` (double, optional) - `last_page` (double, optional) - `links` (list of ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaMetaLinksItems, optional) - `path` (string, optional) - `per_page` (double, optional) - `to` (double, optional) - `total` (double, optional) ### ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaDataItemsAttributes - `company` (string, optional) - `created_at` (string, optional) - `last_name` (string, optional) - `name` (string, optional) - `updated_at` (string, optional) ### ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaDataItemsLinks - `self` (string, optional) ### ApiPublicV1ClientsGetResponsesContentApplicationJsonSchemaMetaLinksItems - `active` (boolean, optional) - `label` (string, optional) - `url` (string, optional, nullable) ## Examples **Response** ```json { "data": [ { "attributes": { "company": "Acme", "created_at": "2026-08-10T09:00:00.000000Z", "last_name": "Walker", "name": "Alice", "updated_at": "2026-08-10T09:00:00.000000Z" }, "id": "101", "links": { "self": "https://api.modulards.com/api/public/v1/clients/101" }, "type": "clients" } ], "jsonapi": { "version": "1.1" }, "links": { "first": "https://api.modulards.com/api/public/v1/clients?page%5Bnumber%5D=1", "last": "https://api.modulards.com/api/public/v1/clients?page%5Bnumber%5D=1", "next": null, "prev": null }, "meta": { "current_page": 1, "from": 1, "last_page": 1, "links": [ { "active": false, "label": "« Previous", "url": null }, { "active": true, "label": "1", "url": "https://api.modulards.com/api/public/v1/clients?page%5Bnumber%5D=1" }, { "active": false, "label": "Next »", "url": null } ], "path": "https://api.modulards.com/api/public/v1/clients", "per_page": 15, "to": 1, "total": 1 } } ``` **SDK Code** ```python 200 - Clients import requests url = "https://api.modulards.com/api/public/v1/clients" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript 200 - Clients const url = 'https://api.modulards.com/api/public/v1/clients'; const options = {method: 'GET', 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 - Clients package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.modulards.com/api/public/v1/clients" req, _ := http.NewRequest("GET", 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 - Clients require 'uri' require 'net/http' url = URI("https://api.modulards.com/api/public/v1/clients") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["Authorization"] = 'Bearer ' response = http.request(request) puts response.read_body ``` ```java 200 - Clients import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.modulards.com/api/public/v1/clients") .header("Authorization", "Bearer ") .asString(); ``` ```php 200 - Clients request('GET', 'https://api.modulards.com/api/public/v1/clients', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp 200 - Clients using RestSharp; var client = new RestClient("https://api.modulards.com/api/public/v1/clients"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift 200 - Clients import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/clients")! 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() ```