Zum Inhalt springen
Woodander Doku
DE

Woodander API reference

Every REST endpoint and the MCP tool with the same name, generated from the live API catalog. Version 1, JSON over HTTPS.

Get started

  1. API and MCP access is included in the Pro and Scale plans. See plans.
  2. In the Workspace open Settings, API & MCP, choose what the token may read and an expiry, and create it. The token is shown once.
  3. Send it as a Bearer token to https://woodander.com/api/v1.
bash
curl -H "Authorization: Bearer wdr_..." https://woodander.com/api/v1/whoami

A machine-readable description is at https://woodander.com/api/v1/openapi.json (OpenAPI 3.1). The MCP server is at https://woodander.com/mcp; set it up in the guides.

Authentication

Personal access tokens (wdr_...) are sent as Authorization: Bearer <token>. A token belongs to one person and sees only that person's data. It is stored hashed, so we cannot show it again; if you lose it, revoke it and create another.

A missing, malformed, expired or revoked token gets 401. A token without the scope an endpoint needs gets 403 with insufficient_scope. If the plan no longer includes API access the answer is 403 with plan_required.

Scopes

ScopeGrants
read:productsIhre Discover-Projekte und deren Details.
write:productsÄnderungen an Ihren Discover-Projekten anfragen: Seitenentwürfe, Screenshots, Kurzmeldungen, Antworten auf Bewertungen, Lead-Status. Was passiert, hängt vom Modus pro Projekt ab: ein Vorschlag, den Sie anwenden (Manuell), eine Entwurfsänderung (Hybrid) oder eine öffentliche Veröffentlichung (Autonom). Ihre Seite selbst ändert sich erst, wenn die Woodander-Redaktion den Entwurf freigibt.
read:analyticsAufrufe, Klicks, Verweise und Leads Ihrer Projekte sowie die synchronisierten Google-Analytics-Zahlen (GA4) Ihrer Websites.
read:seoIhre Websites, synchronisierte Search-Console-Daten und Website-Audits.
read:mediaIhre Woodander-Media-Artikel, Beiträge für Ihre Website und Content-Studio-Entwürfe.
read:gtmIhre Google-Tag-Manager-Container, Tags, Trigger und Variablen, Tracking-Analyse und Website-Scans.
write:gtmBitten Sie um Änderungen in Tag Manager. Was dann geschieht, hängt vom Modus ab, den Sie pro Website festlegen: ein Vorschlag, den Sie anwenden (Manuell), oder eine Änderung im separaten Woodander-Workspace (Hybrid). Das Veröffentlichen wartet weiterhin auf Ihre Bestätigung.
publish:gtmTag-Manager-Versionen ohne Rückfrage live schalten, nur dort, wo Sie „Autonom“ aktiviert haben. Geben Sie dies nur einem Agenten, dem Sie vertrauen.
read:keywordsKeyword-Ideen mit Suchvolumen, Wettbewerb und CPC (jede neue Abfrage verbraucht eine der täglichen Keyword-Abfragen Ihres Tarifs), Ihre verfolgten Keywords und ihr Ranking-Verlauf.
write:mediaPrivate Media-Entwürfe anlegen und bearbeiten. Die Woodander-Redaktion prüft weiterhin jeden Beitrag; das Einsenden bleibt bei dir. Was passiert, hängt vom Modus für Media unter Einstellungen → KI-Aktivität ab.
run:auditsWebsite-Audits starten und die Search-Console- und Google-Analytics-Daten deiner Websites aktualisieren, im Rahmen deines Tarifs. Was passiert, hängt vom Modus ab, den du für SEO festlegst.
read:autopilotDie Texte, die Content Autopilot geschrieben hat und die auf deine Prüfung warten.
write:autopilotTexte, die auf deine Prüfung warten, freigeben (veröffentlichen) oder verwerfen. Was passiert, hängt vom Modus für Content Autopilot ab; Verwerfen wartet immer auf dich.
read:marketDeine Market-Inserate und ihr Status.
write:marketEntwürfe für Inserate anlegen, deine Market-Inserate bearbeiten und pausieren; das Einsenden an die Redaktion bleibt bei dir. Was passiert, hängt vom Modus ab, den du für Market festlegst.
read:contentDie freigegebenen Artikel für Ihre eigene Website, die eine über die Woodander-API verbundene Website selbst abruft.
write:contentWoodander mitteilen, wo Ihre Website einen freigegebenen Artikel veröffentlicht hat (Adresse und ID).

Rate limits

60 requests per minute per token, on REST and MCP together, and 20 Tag Manager changes per minute per token. Over the limit you get 429 with error.code = rate_limited and a Retry-After header (seconds).

Errors

Every error has the same shape. Match on error.code; the message is for people.

json
{"error": {"code": "not_found", "message": "Site was not found."}}
HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the scope this endpoint needs.
403plan_requiredThe owner's plan does not include API access.
404not_foundNot found, or not yours. Other people's data is indistinguishable from missing data.
404search_console_not_connectedThe site has no connected Search Console property.
404gtm_container_not_chosenNo Tag Manager container is chosen for the site.
409busyAnother request of the same account is using its allowance: try again in a moment.
409google_reconnectGoogle no longer accepts the owner's Tag Manager access: they reconnect in the Workspace.
409duplicateThe change would duplicate a tag, trigger or variable the container already has (or the version is already live).
422invalid_requestA parameter is not valid (range, type, cursor).
422validation_failedThe body of a change is not valid; details.errors names the fields.
429rate_limitedToo many requests. See Retry-After.
429limit_reachedThe plan's daily keyword lookups are used up; the message says when they reset (see whoami limits).
429account_spend_capThe account reached this month's keyword data limit.
502provider_errorThe keyword data provider failed; nothing was spent. Try again later.
503provider_not_connectedKeyword data is not connected on this server yet.
503provider_budget_reachedKeyword data is paused until the next month.

Pagination and shapes

Responses are {"data": ..., "meta": ...} with stable field names and ISO 8601 dates. Lists take limit and cursor: pass meta.next_cursor back as cursor until it is null. Cursors are opaque.

Endpoint groups