Skip to content
Woodander Docs
EN

SEO & audits

Sites, website audits, reports, uptime, keyword ideas and rank tracking, plus the agent change log.

13 endpoints. Each one is a REST endpoint under https://woodander.com/api/v1 and an MCP tool with the same name and arguments. See the overview for authentication, rate limits and errors.

whoami

GET /api/v1/whoami

The user behind the token, their plan, what is left of every plan limit (limits: per day or month, or held at once) and what the token may do.

MCP tool whoami Scope any Plan Pro and above, or the Project Pro pass

Parameters

No parameters.

Example request

bash
curl "https://woodander.com/api/v1/whoami" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "whoami",
        "arguments": {}
    }
}

Example response Example

json
{
    "data": {
        "user": {
            "id": 1,
            "name": "Ada",
            "email": "ada@example.com"
        },
        "plan": {
            "names": [
                "Pro"
            ],
            "features": [
                "api_access",
                "search_insights"
            ]
        },
        "limits": {
            "keyword_lookups": {
                "label": "Keyword lookups",
                "kind": "metered",
                "window": "day",
                "limit": 20,
                "used": 4,
                "remaining": 16,
                "resets_at": "2026-10-20T00:00:00+00:00"
            },
            "tracked_keywords": {
                "label": "Tracked keywords",
                "kind": "capacity",
                "window": null,
                "limit": 150,
                "used": 12,
                "remaining": 138,
                "resets_at": null
            }
        },
        "token": {
            "name": "Claude Code",
            "scopes": [
                "read:seo"
            ],
            "expires_at": null,
            "last_used_at": "2026-10-17T09:00:00+00:00"
        }
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403plan_requiredThe plan does not include API access.
429rate_limitedToo many requests. See the Retry-After header.

list_sites

GET /api/v1/sites

Your SEO sites with Search Console connection status and the latest audit.

MCP tool list_sites Scope read:seo Plan Pro and above

Parameters

No parameters.

Example request

bash
curl "https://woodander.com/api/v1/sites" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_sites",
        "arguments": {}
    }
}

Example response Example

json
{
    "data": [
        {
            "host": "example.com",
            "sources": [
                "business",
                "gsc"
            ],
            "business": {
                "id": 3,
                "name": "Example"
            },
            "search_console": {
                "connected": true,
                "property": "sc-domain:example.com",
                "tracked": true,
                "synced_at": "2026-10-17T03:00:00+00:00",
                "error": null
            },
            "latest_audit": {
                "id": 41,
                "score": 82,
                "finished_at": "2026-10-15T10:00:00+00:00"
            }
        }
    ],
    "meta": {
        "total": 1
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:seo scope.
403plan_requiredThe plan does not include API access.
429rate_limitedToo many requests. See the Retry-After header.

list_audits

GET /api/v1/sites/{site}/audits

Site audits of one site, newest first.

MCP tool list_audits Scope read:seo Plan Pro and above

Parameters

NameInTypeRequiredDescription
site path string Yes Host of one of your sites, e.g. example.com (see list_sites).
limit query integer No Page size, 1 to 100.
cursor query string No meta.next_cursor of the previous page.

Example request

bash
curl "https://woodander.com/api/v1/sites/example.com/audits" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_audits",
        "arguments": {
            "site": "example.com"
        }
    }
}

Example response Example

json
{
    "data": [
        {
            "id": 41,
            "host": "example.com",
            "start_url": "https://example.com/",
            "status": "done",
            "score": 82,
            "pages_crawled": 120,
            "counts": {
                "error": 2,
                "warning": 9,
                "notice": 14
            },
            "created_at": "2026-10-15T09:55:00+00:00",
            "finished_at": "2026-10-15T10:00:00+00:00"
        }
    ],
    "meta": {
        "next_cursor": null,
        "limit": 25,
        "total": 1,
        "site": "example.com"
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:seo scope.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
422invalid_requestA parameter is not valid (range, type, cursor).
429rate_limitedToo many requests. See the Retry-After header.

get_audit

GET /api/v1/audits/{id}

One audit: score with its health read (grade A–F, the fixes that reach the next grade and a 0–100 score per area: technical, onpage, speed, ai, ux), issues with the points each costs (impact), their area, example pages and fixes, what changed since the previous run, the pages with the most problems and, when measured, Google PageSpeed lab and field (Chrome UX Report) data for the start page, with the detailed audits under speed.detailed (same shape as pagespeed_check).

MCP tool get_audit Scope read:seo Plan Pro and above

Parameters

NameInTypeRequiredDescription
id path integer Yes Audit id (see list_audits).

Example request

bash
curl "https://woodander.com/api/v1/audits/12" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "get_audit",
        "arguments": {
            "id": 12
        }
    }
}

Example response Example

json
{
    "data": {
        "id": 41,
        "host": "example.com",
        "status": "done",
        "score": 82,
        "health": {
            "grade": "B",
            "next": {
                "grade": "A",
                "points": 8,
                "fixes": 2
            },
            "areas": [
                {
                    "key": "technical",
                    "score": 96,
                    "issues": 2
                },
                {
                    "key": "onpage",
                    "score": 88,
                    "issues": 3
                },
                {
                    "key": "speed",
                    "score": 100,
                    "issues": 0
                },
                {
                    "key": "ai",
                    "score": 94,
                    "issues": 1
                },
                {
                    "key": "ux",
                    "score": 100,
                    "issues": 0
                }
            ]
        },
        "issues": [
            {
                "code": "missing_meta_description",
                "severity": "warning",
                "message": "Missing meta description",
                "pages": 9,
                "area": "onpage",
                "impact": 1,
                "examples": [
                    "https://example.com/a"
                ],
                "why": null,
                "fix": null
            }
        ],
        "action_plan": [
            {
                "status": "new",
                "severity": "warning",
                "message": "Missing meta description",
                "pages": 9
            }
        ],
        "speed": {
            "strategy": "mobile",
            "score": 71,
            "lab": [
                {
                    "id": "largest-contentful-paint",
                    "label": "Largest Contentful Paint",
                    "value": "3.2 s",
                    "score": 0.5
                }
            ],
            "field": {
                "scope": "origin",
                "overall": "AVERAGE",
                "metrics": [
                    {
                        "key": "LARGEST_CONTENTFUL_PAINT_MS",
                        "label": "Largest Contentful Paint",
                        "value": "2.3 s",
                        "category": "FAST"
                    }
                ]
            },
            "measured_at": "2026-10-15T10:00:00.000Z"
        },
        "pages": []
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:seo scope.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
429rate_limitedToo many requests. See the Retry-After header.

keyword_ideas

GET /api/v1/keywords/ideas

Keyword ideas with monthly search volume, competition (0 to 1), CPC in USD and a 12-month trend, for a seed keyword or (without seed) for your site. A new search uses one of your plan's daily keyword lookups (repeating it the same UTC day is free); meta.limits says what is left.

MCP tool keyword_ideas Scope read:keywords Plan Pro and above

Parameters

NameInTypeRequiredDescription
site query string Yes Host of one of your sites (see list_sites); the keywords belong to it and set the default location and language.
seed query string No Up to 5 keywords separated by commas. Leave it out for keywords of the site itself.
location query integer No Location code, e.g. 2840 United States, 2826 United Kingdom, 2276 Germany, 2724 Spain, 2804 Ukraine. Default: the site's market.
language query string No Language code: en, de, es, uk, pl, fr, it, nl. Default: the site's language.

Example request

bash
curl "https://woodander.com/api/v1/keywords/ideas?site=example.com" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "keyword_ideas",
        "arguments": {
            "site": "example.com"
        }
    }
}

Example response Example

json
{
    "data": {
        "site": "example.com",
        "mode": "seed",
        "seeds": [
            "ceramic mugs"
        ],
        "location": {
            "code": 2840,
            "name": "United States"
        },
        "language": {
            "code": "en",
            "name": "English"
        },
        "items": [
            {
                "keyword": "ceramic mugs",
                "search_volume": 14800,
                "competition": 0.92,
                "competition_level": "HIGH",
                "cpc_usd": 1.12,
                "trend": [
                    12100,
                    12100,
                    14800,
                    14800,
                    18100,
                    22200,
                    14800,
                    12100,
                    12100,
                    14800,
                    14800,
                    14800
                ]
            }
        ]
    },
    "meta": {
        "cached": false,
        "source": "dataforseo_labs",
        "limits": {
            "keyword_lookups": {
                "kind": "metered",
                "window": "day",
                "limit": 20,
                "used": 4,
                "remaining": 16,
                "resets_at": "2026-10-20T00:00:00+00:00"
            }
        }
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:keywords scope.
403plan_requiredThe plan does not include API access.
422invalid_requestA parameter is not valid (range, type, cursor).
429limit_reachedThe plan's daily keyword lookups are used up.
503provider_not_connectedKeyword data is not connected on this server yet.
429rate_limitedToo many requests. See the Retry-After header.

tracked_keywords

GET /api/v1/sites/{site}/keywords/tracked

Keywords you track for a site with the latest Google position, change since the check before, best and worst, and the URL that ranks. Positions are organic ranks; null = not in the checked depth (or not checked yet).

MCP tool tracked_keywords Scope read:keywords Plan Pro and above

Parameters

NameInTypeRequiredDescription
site path string Yes Host of one of your sites, e.g. example.com (see list_sites).
limit query integer No Page size, 1 to 200.
cursor query string No meta.next_cursor of the previous page.

Example request

bash
curl "https://woodander.com/api/v1/sites/example.com/keywords/tracked" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "tracked_keywords",
        "arguments": {
            "site": "example.com"
        }
    }
}

Example response Example

json
{
    "data": [
        {
            "id": 7,
            "keyword": "ceramic mugs",
            "location": {
                "code": 2840,
                "name": "United States"
            },
            "language": "en",
            "device": "desktop",
            "position": 6,
            "previous_position": 9,
            "change": 3,
            "best_position": 5,
            "worst_position": 14,
            "url": "https://example.com/mugs",
            "last_checked_at": "2026-10-18T04:10:00+00:00",
            "next_check_at": "2026-10-19T04:07:00+00:00"
        }
    ],
    "meta": {
        "next_cursor": null,
        "limit": 25,
        "total": 1,
        "site": "example.com",
        "depth": 50,
        "frequency": "daily",
        "limits": {
            "tracked_keywords": {
                "kind": "capacity",
                "window": null,
                "limit": 150,
                "used": 12,
                "remaining": 138,
                "resets_at": null
            }
        }
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:keywords scope.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
422invalid_requestA parameter is not valid (range, type, cursor).
429rate_limitedToo many requests. See the Retry-After header.

rank_history

GET /api/v1/sites/{site}/keywords/tracked/{id}/history

The position history of one tracked keyword: every finished check in the period, oldest first.

MCP tool rank_history Scope read:keywords Plan Pro and above

Parameters

NameInTypeRequiredDescription
site path string Yes Host of one of your sites, e.g. example.com (see list_sites).
id path integer Yes Tracked keyword id (see tracked_keywords).
days query integer No Period in days, 1 to 365. Default 90.

Example request

bash
curl "https://woodander.com/api/v1/sites/example.com/keywords/tracked/12/history" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "rank_history",
        "arguments": {
            "site": "example.com",
            "id": 12
        }
    }
}

Example response Example

json
{
    "data": {
        "id": 7,
        "keyword": "ceramic mugs",
        "location": {
            "code": 2840,
            "name": "United States"
        },
        "language": "en",
        "device": "desktop",
        "position": 6,
        "previous_position": 9,
        "change": 3,
        "best_position": 5,
        "worst_position": 14,
        "url": "https://example.com/mugs",
        "last_checked_at": "2026-10-18T04:10:00+00:00",
        "next_check_at": "2026-10-19T04:07:00+00:00",
        "history": [
            {
                "checked_at": "2026-10-17T04:12:00+00:00",
                "position": 9,
                "url": "https://example.com/mugs"
            },
            {
                "checked_at": "2026-10-18T04:10:00+00:00",
                "position": 6,
                "url": "https://example.com/mugs"
            }
        ]
    },
    "meta": {
        "site": "example.com",
        "days": 90,
        "depth": 50
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:keywords scope.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
422invalid_requestA parameter is not valid (range, type, cursor).
429rate_limitedToo many requests. See the Retry-After header.

ai_visibility

GET /api/v1/sites/{site}/ai-visibility

The prompts you track for a site (the questions your customers ask AI) with the latest answer of each AI platform: whether your brand was named, its place among the brands named, the competitors named, the sources cited and the change since the check before. meta.summary has the mention rate and average place, meta.share_of_voice the competitors across prompts. Stored checks, never a live call; needs AI visibility in your plan.

MCP tool ai_visibility Scope read:keywords Plan Pro and above

Parameters

NameInTypeRequiredDescription
site path string Yes Host of one of your sites, e.g. example.com (see list_sites).
limit query integer No Page size, 1 to 100.
cursor query string No meta.next_cursor of the previous page.

Example request

bash
curl "https://woodander.com/api/v1/sites/example.com/ai-visibility" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "ai_visibility",
        "arguments": {
            "site": "example.com"
        }
    }
}

Example response Example

json
{
    "data": [
        {
            "id": 3,
            "prompt": "What are the best tools for mapping architecture?",
            "location": "United States",
            "language": "English",
            "checked": "2 days ago",
            "platforms": [
                {
                    "platform": "chat_gpt",
                    "state": "done",
                    "mentioned": true,
                    "position": 4,
                    "trend": "same",
                    "model": "gpt-4.1-mini",
                    "checked_at": "2026-10-21T04:10:00+00:00",
                    "competitors": [
                        {
                            "name": "Alchetype",
                            "domain": "alchetype.co"
                        }
                    ],
                    "sources": [
                        {
                            "domain": "example.com",
                            "url": "https://example.com/en"
                        }
                    ],
                    "cited_as_source": true,
                    "answer_excerpt": "1. **Alchetype** ... 4. **Archemap** ..."
                }
            ]
        }
    ],
    "meta": {
        "next_cursor": null,
        "limit": 25,
        "total": 1,
        "site": "example.com",
        "frequency": "weekly",
        "summary": {
            "checks": 2,
            "mentioned": 1,
            "rate": 50,
            "rateDelta": null,
            "averagePosition": 4,
            "positionDelta": null,
            "prompts": 1,
            "cited": 1
        },
        "share_of_voice": [
            {
                "name": "Alchetype",
                "domain": "alchetype.co",
                "mentions": 2,
                "share": 100,
                "you": false
            }
        ],
        "limits": {
            "ai_visibility_prompts": {
                "kind": "capacity",
                "window": null,
                "limit": 25,
                "used": 1,
                "remaining": 24,
                "resets_at": null
            }
        }
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:keywords scope.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
422invalid_requestA parameter is not valid (range, type, cursor).
429rate_limitedToo many requests. See the Retry-After header.

uptime_status

GET /api/v1/uptime

Your uptime monitors: state (up, down, unknown, paused), the last check (HTTP status, response time, reason when down), uptime percentages for 24 hours, 7 and 30 days, and the latest incidents. Empty when your plan has no uptime monitoring.

MCP tool uptime_status Scope read:seo Plan Pro and above

Parameters

NameInTypeRequiredDescription
site query string No Keep one of your sites (host, see list_sites).

Example request

bash
curl "https://woodander.com/api/v1/uptime" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "uptime_status",
        "arguments": {}
    }
}

Example response Example

json
{
    "data": [
        {
            "site": "example.com",
            "url": "https://example.com/",
            "state": "up",
            "active": true,
            "since": "2026-10-12T08:00:00+00:00",
            "last_checked_at": "2026-10-19T09:59:00+00:00",
            "last_status_code": 200,
            "last_response_ms": 142,
            "last_error": null,
            "uptime": {
                "h24": 100,
                "d7": 99.94,
                "d30": 99.9
            },
            "incidents": [
                {
                    "started_at": "2026-10-11T22:10:00+00:00",
                    "ended_at": "2026-10-11T22:19:00+00:00",
                    "minutes": 9,
                    "error": "status",
                    "status_code": 503
                }
            ]
        }
    ],
    "meta": {
        "total": 1,
        "interval_minutes": 1,
        "limit": 3
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:seo scope.
403plan_requiredThe plan does not include API access.
422invalid_requestA parameter is not valid (range, type, cursor).
429rate_limitedToo many requests. See the Retry-After header.

list_reports

GET /api/v1/reports

Your white-label PDF reports, newest first (status queued, done or failed), and your scheduled client reports with their recipients. download_url opens the PDF for the signed-in owner of the account for 30 minutes. Empty without white-label reports on your plan.

MCP tool list_reports Scope read:seo Plan Pro and above

Parameters

NameInTypeRequiredDescription
site query string No Keep one of your sites (host, see list_sites).
limit query integer No Page size, 1 to 100.
cursor query string No meta.next_cursor of the previous page.

Example request

bash
curl "https://woodander.com/api/v1/reports" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_reports",
        "arguments": {}
    }
}

Example response Example

json
{
    "data": [
        {
            "id": 12,
            "site": "example.com",
            "status": "done",
            "source": "schedule",
            "size_bytes": 148220,
            "created_at": "2026-10-19T06:00:00+00:00",
            "download_url": "https://woodander.com/workspace/seo/client-reports/12/download?signature=…"
        }
    ],
    "meta": {
        "next_cursor": null,
        "limit": 25,
        "total": 1,
        "schedules": [
            {
                "id": 3,
                "site": "example.com",
                "frequency": "monthly",
                "active": true,
                "recipients": 2,
                "unsubscribed": 0
            }
        ]
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:seo scope.
403plan_requiredThe plan does not include API access.
422invalid_requestA parameter is not valid (range, type, cursor).
429rate_limitedToo many requests. See the Retry-After header.

run_audit

POST /api/v1/sites/{site}/audits

Start a site audit of one of your sites, within your plan (the free plan has one audit a month, and only one audit runs at a time). The audit runs in the background: read it with list_audits and get_audit. What happens depends on the mode the owner set for this module in Settings → AI activity: Manual stores a proposal the owner applies in the Workspace (the answer has a confirm_url), Hybrid and Autonomous run it. Poll agent_change_status with the id.

MCP tool run_audit Scope run:audits Plan Pro and above

Parameters

NameInTypeRequiredDescription
site path string Yes Host of one of your sites (see list_sites).

Example request

bash
curl -X POST "https://woodander.com/api/v1/sites/example.com/audits" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "run_audit",
        "arguments": {
            "site": "example.com"
        }
    }
}

Example response Example

json
{
    "data": {
        "id": 41,
        "action": "seo.run_audit",
        "risk": "reversible",
        "status": "done",
        "needs": null,
        "summary": "Start a site audit of example.com",
        "diff": [],
        "requested_by": "Token “Claude Code”",
        "note": null,
        "error": null,
        "result": {
            "summary": "Audit of example.com started. It runs in the background.",
            "audit_id": 18
        },
        "confirm_url": null,
        "created_at": "2026-10-19T09:00:00+00:00",
        "decided_at": null
    },
    "meta": {
        "outcome": "done",
        "module": "seo",
        "mode": "hybrid",
        "hint": null
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the run:audits scope.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
429rate_limitedToo many requests. See the Retry-After header.

agent_changes

GET /api/v1/agent/changes

The last 50 change requests of one module (media, seo, autopilot or market): proposals and confirmations waiting for the owner, and what ran. Needs the module's read scope (read:media, read:seo, read:autopilot, read:market).

MCP tool agent_changes Scope any Plan Pro and above

Parameters

NameInTypeRequiredDescription
module query string Yes The module. One of: media, seo, autopilot, market.

Example request

bash
curl "https://woodander.com/api/v1/agent/changes?module=media" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "agent_changes",
        "arguments": {
            "module": "media"
        }
    }
}

Example response Example

json
{
    "data": [
        {
            "id": 41,
            "action": "media.update_draft",
            "risk": "reversible",
            "status": "pending",
            "needs": "apply",
            "summary": "Update the draft “Notes on a quiet launch” (title)",
            "diff": [],
            "requested_by": "Token “Claude Code”",
            "note": null,
            "error": null,
            "result": null,
            "confirm_url": "https://woodander.com/workspace/settings/ai-activity?module=media&change=41",
            "created_at": "2026-10-19T09:00:00+00:00",
            "decided_at": null
        }
    ],
    "meta": {
        "total": 1,
        "module": "media",
        "mode": "manual"
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403plan_requiredThe plan does not include API access.
422invalid_requestA parameter is not valid (range, type, cursor).
429rate_limitedToo many requests. See the Retry-After header.

agent_change_status

GET /api/v1/agent/changes/{id}

One change request of Media, SEO, Content Autopilot or Market by id: its status (pending, done, failed, rejected), what it waits for and the result. Needs the module's read scope.

MCP tool agent_change_status Scope any Plan Pro and above

Parameters

NameInTypeRequiredDescription
id path integer Yes The id a change request returned.

Example request

bash
curl "https://woodander.com/api/v1/agent/changes/12" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "agent_change_status",
        "arguments": {
            "id": 12
        }
    }
}

Example response Example

json
{
    "data": {
        "id": 41,
        "action": "seo.run_audit",
        "risk": "reversible",
        "status": "done",
        "needs": null,
        "summary": "Start a site audit of example.com",
        "diff": [],
        "requested_by": "Token “Claude Code”",
        "note": null,
        "error": null,
        "result": {
            "summary": "Audit of example.com started. It runs in the background.",
            "audit_id": 18
        },
        "confirm_url": null,
        "created_at": "2026-10-19T09:00:00+00:00",
        "decided_at": null
    },
    "meta": {
        "outcome": "done",
        "module": "seo",
        "mode": "hybrid",
        "hint": null
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
429rate_limitedToo many requests. See the Retry-After header.