REST API + MCP server
SEO Report API for
Developers and AI Agents
Create reports over REST, poll them to completion, and read the same saved report your team sees on the website. The same API key from your paid plan connects any MCP-capable agent.
Access model
API access is account-linked and key-gated. Choose a plan, create an API key in your account, and every new site you run through the API uses your plan's credits, exactly as it would on the website. Credits reset on the first day of each month (UTC) and never roll over.
Website sessions, API calls, and agent sessions read from the same saved report state.
Create a report, poll for status, then read the full results from the same object.
Available endpoints
/api/v1/reports/previewCreate a score preview for partner integrations on a paid plan.
/api/v1/reportsCreate a new report or reuse one that already exists. Add "forceRerun": true to scan the site again instead.
/api/v1/reports/:idGet the latest report status and sections.
/api/v1/reports/:id/resultRead the full report results.
/api/v1/reports/:id/download?format=jsonExport the report payload as JSON for programmatic integrations.
Quickstart: an SEO report from curl
Three requests cover the whole flow, using an API key from your paid plan. The first creates the report, the second polls it until its status is no longer queued or running, and the third exports it. A new site uses one credit; running a site you already have a report for again does not use a credit.
export SEOREPORT_API_KEY="sr__live_your_api_key"
# Send the key as a header file so it never sits in curl's argv, where ps shows
# it to every local user. printf is a shell builtin, so it spawns no process.
auth() { printf 'Authorization: Bearer %s\n' "$SEOREPORT_API_KEY"; }
# 1. Create a report and keep its job ID
JOB_ID=$(curl -s -X POST https://seoreport.dev/api/v1/reports \
-H @<(auth) \
-H "Content-Type: application/json" \
-d '{"url": "example.com"}' | jq -r '.report.jobId')
# 2. Poll until the report is no longer queued or running
while :; do
STATUS=$(curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID" \
-H @<(auth) | jq -r '.report.status')
case "$STATUS" in queued|running) sleep 3 ;; *) break ;; esac
done
echo "status: $STATUS"
# 3. Export the finished report (format=pdf, md and txt also work)
curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID/download?format=json" \
-H @<(auth) -o report.jsonSEO monitoring API
A domain registered for monitoring is re-audited every week. When something changes, the alert address receives an email: a new critical or high-severity finding, a resolved critical finding, or a move to a different score band. A week without a change sends nothing.
/api/v1/monitorsStarts weekly monitoring for a domain; "enabled": false pauses it.
/api/v1/monitorsLists the domains this account monitors.
/api/v1/monitors?url=Stops monitoring a domain and deletes its stored results.
# Uses the auth() helper from the quickstart above.
# Re-audit a domain every week and email [email protected] when it changes
curl -X PUT https://seoreport.dev/api/v1/monitors \
-H @<(auth) \
-H "Content-Type: application/json" \
-d '{"url": "example.com", "alertEmail": "[email protected]"}'
# List monitored domains
curl https://seoreport.dev/api/v1/monitors \
-H @<(auth)
# Stop monitoring (pass the host the list returns)
curl -X DELETE "https://seoreport.dev/api/v1/monitors?url=example.com" \
-H @<(auth)Monitoring is included with paid plans and does not spend report credits.
Official TypeScript Client
A typed client for the REST API. Authenticate with your plan's API key, then create, poll and export reports from TypeScript.
Command Line
Run reports from your terminal with your API key. One global install.
npm install -g @seoreport/clientMCP server — same API, same key
Point any MCP-capable client at https://seoreport.dev/mcp and authenticate with the same Bearer API key you use for REST. The report and account tools are advertised on connect, so an agent can run an audit and read the findings without any glue code.
{
"mcpServers": {
"seoreport": {
"url": "https://seoreport.dev/mcp",
"headers": {
"Authorization": "Bearer sr__live_your_api_key"
}
}
}
}create_reportStart a report for a URL and get a job ID back.
get_report_statusPoll a job until the report is ready.
get_reportRead the finished report with its score and findings.
list_reportsList the reports on the account.
get_report_downloadGet a download URL for JSON, Markdown, text, or PDF.
get_usageCheck remaining credits and the current billing period.
Checkout, cancellation, and account deletion return a browser confirmation URL instead of acting directly. An agent can start them; only a person can finish them.
{
"success": true,
"report": {
"jobId": "3f6c2a1e-8d4b-4c7a-9e21-5b0d7f4a6c18",
"status": "completed",
"targetUrl": "https://example.com"
},
"pollAfterMs": 0
}Ready to build?
Choose a plan, create an API key, and start integrating SEO reports into your product.