REST API. Build your own.

Full programmatic access to your workspace. Same surface as the cloud dashboard, scriptable. Read links and revenue, trigger scans, apply fixes. Workspace-scoped API keys.

Pro feature. Comes with full read/write access and rate-limited at 100 requests per minute per workspace.

Authentication.

Generate a workspace API key in your workspace settings. Pass it as a Bearer token. The key is scoped to your workspace and can be rotated anytime.

curl https://api.linkpulse.dev/v2/sites \ -H "Authorization: Bearer lp_workspace_YOUR_KEY"

What you can do.

List your sites and links

GET /v2/sites returns every site in your workspace with link counts, scan dates, and connector type.

Get broken links

GET /v2/sites/:id/links?status=broken returns dead links with HTTP status, last-seen-working date, and detected affiliate network.

Read revenue

GET /v2/sites/:id/revenue returns revenue per article, per network, per link. Cross-joined with link health when WeCanTrack is connected.

Trigger a scan

POST /v2/sites/:id/scan kicks off an on-demand link health scan. Returns a job id you can poll.

Apply a fix

POST /v2/sites/:id/links/replace updates a broken link to a working alternative on your post content (via the WP plugin or JS connector).

Search alternatives

POST /v2/replacements/find runs the same web-search-powered alternative product finder the AI assistant uses.

End-to-end example.

A small script that finds your top 5 broken links by revenue impact and replaces them automatically:

const KEY = process.env.LP_API_KEY; const headers = { Authorization: `Bearer ${KEY}` }; // 1. Get sites const sites = await fetch('https://api.linkpulse.dev/v2/sites', { headers }) .then(r => r.json()); // 2. For each site, get top broken links by revenue impact for (const site of sites.data) { const broken = await fetch( `https://api.linkpulse.dev/v2/sites/${site.id}/links?status=broken&sort=revenue&limit=5`, { headers } ).then(r => r.json()); // 3. Replace each one for (const link of broken.data) { await fetch( `https://api.linkpulse.dev/v2/sites/${site.id}/links/replace`, { method: 'POST', headers: { ...headers, 'Content-Type': 'application/json' }, body: JSON.stringify({ link_id: link.id, mode: 'auto' }), } ); } }

Same surface as the dashboard.

If the cloud dashboard can do it, the API can do it. Build custom reports, ship internal tools, plug LinkPulse into your existing pipelines.

Get started for free