Menu

API reference · Site Audit

Issues

seo_site_auditor · issues · 4 operations

GET/v1/seo/site-auditor/runs/{run_id}/issues

List the issues an audit found

seo_site_auditor.issues.list

ReadIdempotentSince 2026-11-01

Lists the issues one audit found, the most serious first (critical, high, medium, low, info; then by affected pages), paginated by cursor (limit up to 200). Each issue has its check id, category, severity, title, description (what is wrong), impact (why it matters), how_to_fix, the affected URLs (up to 100 per issue; affected_urls_limit cuts them for a shorter answer) and their real count (affected_count), and metadata with the check's own data when it has any. state=active (default) lists the issues that count in the health score; state=ignored lists the ones an intentional rule left out of this audit, with the rule (ignore_rule) and partial_url_scope when the rule covered only some URLs. Filters: severity, category. The list is the audit as it ran: a rule added later applies from the next audit. An audit that failed or is still running has no issues (empty list). Not found (audit_run_not_found) if the audit does not exist. Requires view access to Site Audit.

Scope
seo_site_auditor:read
Permission
View the module
MCP tool
seo_site_auditor_issues_listOn the full surface; on the compact one, mb_execute_operation with id: "seo_site_auditor.issues.list".

Declared cost: up to 2 reads and 0 writes per call (they count against the daily quota).

Parameters

run_idstringpathrequired

Audit id (id from seo_site_auditor.runs.list, or run_id from seo_site_auditor.runs.trigger).

limitintegerqueryoptional

How many items this page brings at most (see the maximum and the default in the schema).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

stateenumqueryoptional

active (default: the issues that count in the score) or ignored (the ones an intentional rule left out of this audit).

Values: active, ignored · Default: "active"

severityenumqueryoptional

Only issues of this severity.

Values: critical, high, medium, low, info

categoryenumqueryoptional

Only issues of this category.

Values: crawling, meta_tags, content, links, images, speed, security, sitemaps, redirects, usability, resources, localization, structured_data, open_graph

affected_urls_limitintegerqueryoptional

At most this many affected_urls per issue (0 to 100; affected_count keeps the real total). Default: all of them (an audit stores up to 100 per issue). For a short answer use 10; the whole list is also in seo_site_auditor.issues.export.

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/seo/site-auditor/runs/{run_id}/issues" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/seo/site-auditor/runs/{run_id}/issues" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/seo/site-auditor/runs/{run_id}/issues/export

Export an audit's issues as CSV or JSON

seo_site_auditor.issues.export

ReadIdempotentSince 2026-11-01

Exports the active issues of one audit as a file, returned inline in content: format=csv (default; columns severity, category, issue, affected pages, how to fix, with the header and the severity and category names in the caller's language) or format=json (every field of every issue). Also returns a suggested file_name, the content_type and issue_count. Use seo_site_auditor.issues.list to read them page by page instead. Errors: audit_run_not_found (404), audit_issues_not_found (404: the audit failed or is still running). Requires view access to Site Audit.

Scope
seo_site_auditor:read
Permission
View the module
MCP tool
seo_site_auditor_issues_exportOn the full surface; on the compact one, mb_execute_operation with id: "seo_site_auditor.issues.export".

Declared cost: up to 2 reads and 0 writes per call (they count against the daily quota).

Parameters

run_idstringpathrequired

Audit id (id from seo_site_auditor.runs.list, or run_id from seo_site_auditor.runs.trigger).

formatenumqueryoptional

csv (default: severity, category, issue, affected pages, how to fix) or json (every field of every active issue).

Values: csv, json · Default: "csv"

Response

formatenum

Values: csv, json

file_namestring
content_typestring
issue_countnumber
contentstring

Errors

Example

curl "https://api.mb-suite.com/v1/seo/site-auditor/runs/{run_id}/issues/export" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/seo/site-auditor/runs/{run_id}/issues/export" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/seo/site-auditor/sites/{site_id}/ignore-rules

Mark an issue as intentional for a site

seo_site_auditor.issues.ignore

WriteSince 2026-11-01

Adds an intentional rule to a site so an issue stops counting from the next audit (e.g. a page that is noindex on purpose): issue_id is the check id (id of an item of seo_site_auditor.issues.list), reason is required, and url_pattern (starts with / or *) limits the rule to the affected URLs that match it; without it, the whole issue. Past audits keep their results; the next one lists the issue under state=ignored and leaves it out of the health score. Errors: unknown_issue_id (400: not a check of the audit engine; details.suggestions lists the closest ids), audit_site_not_found (404), ignore_rule_exists (409: same issue and pattern), limit_reached (409, resource audit_ignore_rules: 100 rules per site). Returns the rule (its id is what seo_site_auditor.issues.unignore takes). Requires edit access to Site Audit.

Scope
seo_site_auditor:write
Permission
Edit in the module
MCP tool
seo_site_auditor_issues_ignoreOn the full surface; on the compact one, mb_execute_operation with id: "seo_site_auditor.issues.ignore".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

site_idstringpathrequired

Audited site id (id from seo_site_auditor.sites.list).

issue_idstringbodyrequired

Issue id: the id of the check, e.g. meta_description_missing (id of an item of seo_site_auditor.issues.list).

reasonstringbodyrequired

Why it is intentional (required; shown to the team next to the issue).

url_patternstringbodyoptional

Only the affected URLs that match this pattern (starts with / or *). Without it, the whole issue.

Response

idstring
issue_idstring
url_patternstring | null
reasonstring
ignored_by_user_idstring | null
ignored_by_namestring | null
ignored_atnumber | null

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/seo/site-auditor/sites/{site_id}/ignore-rules" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "issue_id": "ISSUE_ID",
  "reason": "REASON"
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/seo/site-auditor/sites/{site_id}/ignore-rules" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "issue_id": "ISSUE_ID",
  "reason": "REASON"
}'
POST/v1/seo/site-auditor/sites/{site_id}/ignore-rules/{rule_id}/unignore

Reactivate an issue marked as intentional

seo_site_auditor.issues.unignore

WriteSince 2026-11-01

Removes an intentional rule from a site (rule_id: id of an item of ignore_rules in seo_site_auditor.sites.get), so the issue counts again from the next audit; past audits keep their results. Returns the removed rule, so it can be added back with seo_site_auditor.issues.ignore. Errors: audit_site_not_found (404), ignore_rule_not_found (404). Requires edit access to Site Audit.

Scope
seo_site_auditor:write
Permission
Edit in the module
MCP tool
seo_site_auditor_issues_unignoreOn the full surface; on the compact one, mb_execute_operation with id: "seo_site_auditor.issues.unignore".

Declared cost: up to 1 reads and 1 writes per call (they count against the daily quota).

Parameters

site_idstringpathrequired

Audited site id (id from seo_site_auditor.sites.list).

rule_idstringpathrequired

Ignore rule id (id of an item of ignore_rules in seo_site_auditor.sites.get).

Response

oktrue
ruleobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/seo/site-auditor/sites/{site_id}/ignore-rules/{rule_id}/unignore" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/seo/site-auditor/sites/{site_id}/ignore-rules/{rule_id}/unignore" \
  -H "Authorization: Bearer $MB_TEST_KEY"