Saltar al contenido
Woodander Documentación
ES

Site posts

The approved articles for your own site, for a site connected through the Woodander API to pull, and a way to report where it published each.

3 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.

list_site_posts

GET /api/v1/site-posts

The posts you approved for your sites connected through the Woodander API, newest first, with title, slug, meta description, HTML and Markdown. Poll it from your site (for example every hour, with since set to the last run) and publish what is new. Only for a site you connected as "Woodander API (your site pulls the articles)" in Media → Articles for your site: an approved post waits here and nothing is sent to your site.

MCP tool list_site_posts Scope read:content Plan Pro and above

Parameters

NameInTypeRequiredDescription
site query string No Only posts of this connected site (its host, e.g. yourblog.com).
since query string No Only posts created or changed since this ISO 8601 date (updated_at), e.g. 2026-10-01T00:00:00Z.
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/site-posts" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_site_posts",
        "arguments": {}
    }
}

Example response Example

json
{
    "data": [
        {
            "id": 14,
            "site": "yourblog.com",
            "title": "How to choose a standing desk",
            "slug": "how-to-choose-a-standing-desk",
            "meta_description": "Height range, stability and price: what matters.",
            "keyword": "standing desk",
            "html": "<h2>Start with your height</h2><p>…</p>",
            "markdown": "## Start with your height\n\n…",
            "status": "published",
            "published_at": "2026-10-24T09:00:00+00:00",
            "updated_at": "2026-10-24T09:00:00+00:00",
            "remote_id": null,
            "remote_url": null
        }
    ],
    "meta": {
        "next_cursor": null,
        "limit": 25,
        "total": 1,
        "site": null,
        "since": null
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the read:content 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.

get_site_post

GET /api/v1/site-posts/{id}

One approved post of a site connected through the Woodander API, with its HTML and Markdown.

MCP tool get_site_post Scope read:content Plan Pro and above

Parameters

NameInTypeRequiredDescription
id path integer Yes Id of an approved post (see list_site_posts).

Example request

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

Example response Example

json
{
    "data": {
        "id": 14,
        "site": "yourblog.com",
        "title": "How to choose a standing desk",
        "slug": "how-to-choose-a-standing-desk",
        "meta_description": "Height range, stability and price: what matters.",
        "keyword": "standing desk",
        "html": "<h2>Start with your height</h2><p>…</p>",
        "markdown": "## Start with your height\n\n…",
        "status": "published",
        "published_at": "2026-10-24T09:00:00+00:00",
        "updated_at": "2026-10-24T09:00:00+00:00",
        "remote_id": null,
        "remote_url": null
    }
}

Errors

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

mark_site_post_live

POST /api/v1/site-posts/{id}/live

Tell Woodander where your site published a post: its address (shown as "View on your site" in the Workspace) and the id your site gave it. Send at least one. Returns the post.

MCP tool mark_site_post_live Scope write:content Plan Pro and above

Parameters

NameInTypeRequiredDescription
id path integer Yes Id of an approved post (see list_site_posts).
url body string No The public address of the published post (http or https).
remote_id body string No The id your site gave the post, up to 255 characters.

Example request

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

Example response Example

json
{
    "data": {
        "id": 14,
        "site": "yourblog.com",
        "title": "How to choose a standing desk",
        "slug": "how-to-choose-a-standing-desk",
        "meta_description": "Height range, stability and price: what matters.",
        "keyword": "standing desk",
        "html": "<h2>Start with your height</h2><p>…</p>",
        "markdown": "## Start with your height\n\n…",
        "status": "published",
        "published_at": "2026-10-24T09:00:00+00:00",
        "updated_at": "2026-10-24T09:00:00+00:00",
        "remote_id": "812",
        "remote_url": "https://yourblog.com/how-to-choose-a-standing-desk"
    }
}

Errors

HTTPCodeMeaning
401unauthenticatedMissing, invalid, expired or revoked token.
403insufficient_scopeThe token does not have the write:content scope.
403plan_requiredThe plan does not include API access.
404not_foundNot found, or not yours.
422validation_failedThe body is not valid; details.errors names the fields.
429rate_limitedToo many requests. See the Retry-After header.