Skip to main content
POST
Three endpoints, sharing one link-checking engine: scan one page synchronously, or start a site-wide crawl (via sitemap.xml and internal links) and poll it to completion. Every discovered link is resolved, checked over the network, and classified by severity.
2 credits per call (single-page scan or crawl start) · Typical response time ~2–10s for a single page

Scan a single page

POST /v1/broken-links checks every link found on one page and returns immediately.

Body parameters

url
string
required
The page to scan. https:// is assumed if the scheme is omitted.

Response

data
object
required

Crawl an entire site

For more than one page, start an async crawl and poll it — see Async Jobs & Polling for the full pattern, phase list, and crawl limits (250 pages, 6-minute budget).

Start the crawl

POST /v1/broken-links/crawl, body { "url": "..." } — same as the single-page scan, any URL on the site. Returns 202 immediately:

Poll the status

GET /v1/broken-links/crawl/:jobId — free and uncached. Returns the standard job envelope. Once status is "done", result holds a SiteCrawlResult: the same summary/statusBreakdown/grade/healthScore shape as the single-page result, plus:
result.pagesCrawled
integer
required
Internal pages fetched.
result.pagesDiscovered
integer
required
Internal pages known (crawled + queued).
Unique links found across every crawled page.
result.truncatedPages
boolean
required
true if the 250-page cap was hit.
true if the 1,500-link check cap was hit.
Same shape as the single-page links, plus sources (sample source pages, capped at 25) and sourceCount (total pages the link appeared on).
result.pages
array
required
Every page crawled: url, statusCode, statusText, severity, linksOnPage, depth (BFS depth from the entry URL), fromSitemap.

Errors

See the full error reference for the platform-level codes (401, 402, 429) that apply to every endpoint.