> 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/broken-links-checker/pages/list-broken-link-pages/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://api.docs.modulards.com/_mcp/server. # List broken link pages GET https://api.modulards.com/api/public/v1/site-broken-link-pages Lists the pages of one website on which the Broken Links Checker found issues, with how many issues each has. Pages that are resolved (the crawler no longer finds them) never appear. `filter[site]` is required, so the list is always for one website; a website out of your reach answers 404, and an id that is not a website answers 422. `filter[category]`, `filter[severity]` and `filter[location]` change the per-page counters (`by_category`, `by_severity`) rather than removing pages from the list. A muted page stays listed: ignoring it detaches every issue from it, so it appears with every counter at `0`. It shows in the unfiltered list and with `filter[ignored]=1`; `filter[ignored]=0` hides it. Your role must be allowed to read Broken Links Checker pages; without it the request answers 404. See "Ignore or restore broken link pages" to mute or restore pages. Reference: https://api.docs.modulards.com/modular-ds-public-api/broken-links-checker/pages/list-broken-link-pages ## 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[site]` (string, optional) — Required. Exact website id: the list is always for one website. - `filter[category]` (string, optional) — `broken_link` or `mixed_content`. Changes the per-page counters; it does not remove pages. - `filter[severity]` (string, optional) — `error`, `warning` or `info`. Changes the per-page counters; it does not remove pages. - `filter[location]` (string, optional) — `internal` or `external`. Changes the per-page counters; it does not remove pages. - `filter[ignored]` (string, optional) — `1` returns only muted pages (every counter answers 0); `0` hides muted pages. Omit it for both. - `filter[issues]` (string, optional) — Only the pages still attached to this issue id. - `filter[s]` (string, optional) — Free-text search over the page URL. - `sort` (string, optional) — `issues_count`, `source_url` or `last_scanned_at`; prefix with `-` for descending. Default: `-issues_count`. - `page[number]` (string, optional) — Page number, starting at 1. Default 1. - `page[size]` (string, optional) — Items per page, 1 to 50. Default 15. ## Response ### 200 200 - Broken Links pages - `data` (list of ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItems, optional) - `jsonapi` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaJsonapi, optional) - `links` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaLinks, optional) - `meta` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaMeta, optional) ## Errors ### 422 Unprocessable Entity Error 422 - filter[site] missing - `errors` (list of ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaErrorsItems, optional) - `jsonapi` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaJsonapi, optional) ## Types ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItems - `attributes` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItemsAttributes, optional) - `id` (string, optional) - `type` (string, optional) ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaJsonapi - `version` (string, optional) ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaLinks - `first` (string, optional) - `last` (string, optional) - `next` (any, optional, nullable) - `prev` (any, optional, nullable) ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaMeta - `current_page` (double, optional) - `from` (double, optional) - `last_page` (double, optional) - `per_page` (double, optional) - `to` (double, optional) - `total` (double, optional) ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaErrorsItems - `detail` (string, optional) - `source` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaErrorsItemsSource, optional) - `status` (string, optional) - `title` (string, optional) ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItemsAttributes - `by_category` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItemsAttributesByCategory, optional) — Findings on the page per category, within the filters of the request. - `by_severity` (ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItemsAttributesBySeverity, optional) — Findings on the page per severity, within the filters of the request. - `ignored_at` (datetime, optional, nullable) — When the page was muted; null while it counts. - `issues_count` (integer, optional) — Findings on the page, within the filters of the request. - `last_scanned_at` (datetime, optional, nullable) — When the page was last scanned. - `source_title` (string, optional, nullable) — Title of the page. - `source_type` (string, optional, nullable) — WordPress content type of the page. - `source_url` (string, optional) — Address of the page that carries the findings. ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaErrorsItemsSource - `parameter` (string, optional) ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItemsAttributesByCategory Findings on the page per category, within the filters of the request. - `broken_link` (double, optional) - `mixed_content` (double, optional) ### ApiPublicV1SiteBrokenLinkPagesGetResponsesContentApplicationJsonSchemaDataItemsAttributesBySeverity Findings on the page per severity, within the filters of the request. - `error` (double, optional) - `info` (double, optional) - `warning` (double, optional) ## Examples **Response** ```json { "data": [ { "attributes": { "by_category": { "broken_link": 2, "mixed_content": 1 }, "by_severity": { "error": 2, "info": 0, "warning": 1 }, "ignored_at": null, "issues_count": 3, "last_scanned_at": "2026-09-16T09:14:00.000000Z", "source_title": "Old post", "source_type": "post", "source_url": "https://example.com/blog/old-post" }, "id": "501", "type": "site-broken-link-pages" }, { "attributes": { "by_category": { "broken_link": 0, "mixed_content": 0 }, "by_severity": { "error": 0, "info": 0, "warning": 0 }, "ignored_at": "2026-09-17T08:00:00.000000Z", "issues_count": 0, "last_scanned_at": "2026-09-10T03:12:00.000000Z", "source_title": "Jane's author page", "source_type": "page", "source_url": "https://example.com/author/jane" }, "id": "502", "type": "site-broken-link-pages" } ], "jsonapi": { "version": "1.1" }, "links": { "first": "{{base_url}}/api/public/v1/site-broken-link-pages?filter%5Bsite%5D=12345&page%5Bnumber%5D=1", "last": "{{base_url}}/api/public/v1/site-broken-link-pages?filter%5Bsite%5D=12345&page%5Bnumber%5D=1", "next": null, "prev": null }, "meta": { "current_page": 1, "from": 1, "last_page": 1, "per_page": 15, "to": 2, "total": 2 } } ``` **SDK Code** ```python 200 - Broken Links pages import requests url = "https://api.modulards.com/api/public/v1/site-broken-link-pages" headers = {"Authorization": "Bearer "} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript 200 - Broken Links pages const url = 'https://api.modulards.com/api/public/v1/site-broken-link-pages'; 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 - Broken Links pages package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.modulards.com/api/public/v1/site-broken-link-pages" 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 - Broken Links pages require 'uri' require 'net/http' url = URI("https://api.modulards.com/api/public/v1/site-broken-link-pages") 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 - Broken Links pages import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.modulards.com/api/public/v1/site-broken-link-pages") .header("Authorization", "Bearer ") .asString(); ``` ```php 200 - Broken Links pages request('GET', 'https://api.modulards.com/api/public/v1/site-broken-link-pages', [ 'headers' => [ 'Authorization' => 'Bearer ', ], ]); echo $response->getBody(); ``` ```csharp 200 - Broken Links pages using RestSharp; var client = new RestClient("https://api.modulards.com/api/public/v1/site-broken-link-pages"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift 200 - Broken Links pages import Foundation let headers = ["Authorization": "Bearer "] let request = NSMutableURLRequest(url: NSURL(string: "https://api.modulards.com/api/public/v1/site-broken-link-pages")! 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() ```