Saltar al contenido
Woodander Documentación
ES

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:productsTus proyectos de Discover y sus detalles.
write:productsPedir cambios en tus proyectos de Discover: borradores de la página, capturas, breves, respuestas a reseñas, estado de los leads. Lo que pasa depende del modo de cada proyecto: una propuesta que aplicas (Manual), un cambio en el borrador (Híbrido) o una publicación (Autónomo). Tu página solo cambia cuando los editores de Woodander aprueban el borrador.
read:analyticsVistas, clics, referencias y leads de sus proyectos, y las cifras sincronizadas de Google Analytics (GA4) de sus sitios.
read:seoTus sitios, datos sincronizados de Search Console y auditorías de sitios.
read:mediaTus artículos de Woodander Media, entradas para tu sitio y borradores de Content Studio.
read:gtmTus contenedores, etiquetas, activadores y variables de Google Tag Manager, análisis de seguimiento y escaneos de sitios.
write:gtmPide cambios en Tag Manager. Lo que ocurre depende del modo que fijes por sitio: una propuesta que tú aplicas (Manual) o un cambio en el espacio de trabajo independiente de Woodander (Híbrido). La publicación sigue esperando tu confirmación.
publish:gtmActivar versiones de Tag Manager sin preguntarte, solo donde activaste «Autónomo». Dáselo únicamente a un agente de confianza.
read:keywordsIdeas de palabras clave con volumen de búsqueda, competencia y CPC (cada búsqueda nueva usa una de las búsquedas diarias de tu plan), tus palabras clave seguidas y su historial de posiciones.
write:mediaCrear y editar tus borradores privados de Media. Los editores de Woodander siguen revisando cada pieza; enviarles un borrador sigue siendo cosa tuya. Lo que ocurre depende del modo de Media en Ajustes → Actividad de IA.
run:auditsIniciar auditorías y actualizar los datos de Search Console y Google Analytics de tus sitios, dentro de los límites de tu plan. Lo que ocurre depende del modo que fijes para SEO.
read:autopilotLas piezas que escribió Content Autopilot y esperan tu revisión.
write:autopilotAprobar (publicar) o descartar piezas que esperan tu revisión. Lo que ocurre depende del modo de Content Autopilot; descartar siempre espera tu confirmación.
read:marketTus anuncios de Market y su estado.
write:marketAñadir borradores de anuncios, editar y pausar tus anuncios de Market; enviarlos a los editores sigue siendo cosa tuya. Lo que ocurre depende del modo que fijes para Market.
read:contentLos artículos aprobados para tu propio sitio, que un sitio conectado a través de la API de Woodander descarga por su cuenta.
write:contentInformar a Woodander de dónde publicó tu sitio un artículo aprobado (su dirección e 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