> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.markup.ai/developer/agents/link-integrity/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.markup.ai/_mcp/server. # Link Integrity > Run the Link Integrity agent (link_integrity) via the Markup AI API. **API name:** `link_integrity` ยท **Category:** Accuracy Check every hyperlink and bare URL for anchor/URL mismatches, dead destinations, domain decay, misattributed citations, and off-topic links. For what this agent does and why it matters, see [Link Integrity](/agents/link-integrity) in the Agent Catalog. ## What it returns The run status plus one issue per flagged link โ€” its location in the text, the issue type, and the risk level. The agent reports findings only; it does not return replacement URLs. It checks the first 50 links per run and warns when it hits that cap. Because links are fetched over the network, runs take longer than text-only agents โ€” prefer the async flow for anything longer than a short document. ## Run this agent Agents are run by ID, but you never need to hardcode one: resolve the ID from the agent's stable `name` (`link_integrity`) with `GET /agents`, then call `POST /agents/{agent_id}/run`. Pass `wait=true` to block until the run completes; omit it to get a `workflow_id` back immediately and track the run with `GET /agents/workflows/{workflow_id}` (or a `webhook_url` in the request body). **`cURL`** ```bash title="cURL" TOKEN="YOUR_TOKEN" # Resolve the agent ID by name AGENT_ID=$(curl -s "https://api.markup.ai/agents?page_size=100" \ -H "Authorization: Bearer $TOKEN" \ | jq -r '.agents[] | select(.name == "link_integrity") | .id') # Run the agent and wait for the result curl -X POST "https://api.markup.ai/agents/$AGENT_ID/run?wait=true" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"text": "Your content to check."}' ``` **`Python`** ```python title="Python" import requests BASE = "https://api.markup.ai" HEADERS = {"Authorization": "Bearer YOUR_TOKEN"} # Resolve the agent ID by name agents = requests.get( f"{BASE}/agents", headers=HEADERS, params={"page_size": 100} ).json()["agents"] agent_id = next(a["id"] for a in agents if a["name"] == "link_integrity") # Run the agent and wait for the result run = requests.post( f"{BASE}/agents/{agent_id}/run", headers=HEADERS, params={"wait": "true"}, json={"text": "Your content to check."}, ).json() print(run["status"], run.get("result")) ``` **`TypeScript`** ```typescript title="TypeScript" const BASE = "https://api.markup.ai"; const headers = { Authorization: "Bearer YOUR_TOKEN" }; // Resolve the agent ID by name const { agents } = await ( await fetch(`${BASE}/agents?page_size=100`, { headers }) ).json(); const agentId = agents.find((a) => a.name === "link_integrity").id; // Run the agent and wait for the result const run = await ( await fetch(`${BASE}/agents/${agentId}/run?wait=true`, { method: "POST", headers: { ...headers, "Content-Type": "application/json" }, body: JSON.stringify({ text: "Your content to check." }), }) ).json(); console.log(run.status, run.result); ``` Prefer MCP? On the hosted MCP server, run this agent with `markupai_run_agents` and `agents: ["link_integrity"]`, or let `markupai_review` select it from your goal โ€” see the [MCP overview](/mcp). > Run the Link Integrity agent (link_integrity) via the Markup AI API.