Zum Inhalt springen
Woodander Doku
DE

Market

Your Market listings: list, create, update and pause.

4 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_market_listings

GET /api/v1/market/listings

Your own Market listings (offers, swaps and requests) with their status (draft, pending, active, paused), availability and whether edits wait for review.

MCP tool list_market_listings Scope read:market Plan Pro and above

Parameters

NameInTypeRequiredDescription
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/market/listings" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "list_market_listings",
        "arguments": {}
    }
}

Example response Example

json
{
    "data": [
        {
            "listing": "sponsored-article-on-lumen-blog",
            "type": "offer",
            "title": "Sponsored article on Lumen blog",
            "format": "sponsored_article",
            "status": "active",
            "availability": "available",
            "summary": "A labelled article with one link.",
            "compensation": "money",
            "pricing_model": "fixed",
            "price": 220,
            "currency": "USD",
            "has_changes_waiting_for_review": false,
            "updated_at": "2026-10-19T08:00:00+00:00"
        }
    ],
    "meta": {
        "next_cursor": null,
        "limit": 25,
        "total": 1,
        "mode": "manual"
    }
}

Errors

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

create_market_listing

POST /api/v1/market/listings

Add a private draft listing (an offer, a swap or a request). It is never sent to Woodander editors or made public by an agent: you send it from the editor. Prices are never invented: send the amount you mean. 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 create_market_listing Scope write:market Plan Pro and above

Parameters

NameInTypeRequiredDescription
type body string Yes What the listing is. One of: offer, swap, request.
title body string Yes Title, up to 140 characters.
format body string Yes What is sold or needed, e.g. sponsored_article, review, newsletter_sponsorship, social_post, other.
summary body string No One or two sentences, up to 600 characters.
description body string No Longer text, up to 2,500 characters.
compensation body string No How it is settled. One of: money, swap, either.
swap_give body string No What you give in exchange (required for a swap).
pricing_model body string No How it is priced. One of: fixed, from, negotiable, on_request.
price body number No Amount in whole units (required for fixed and from prices), never invented.
currency body string No USD, EUR, GBP or UAH.
audience_language body string No Audience language code, e.g. en.
audience_country body string No Audience country or region key, e.g. us or global.
topics body array<string> No Up to 5 topic keys.
site_url body string No The address of the site or channel, https.
details body object No Optional package, duration, placement, materials, restrictions (short texts).
timing_note body string No Your own estimate of timing, up to 160 characters.

Example request

bash
curl -X POST "https://woodander.com/api/v1/market/listings" \
  -H "Authorization: Bearer wdr_..." \
  -H "Content-Type: application/json" \
  -d '{"type":"offer","title":"example","format":"example"}'
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "create_market_listing",
        "arguments": {
            "type": "offer",
            "title": "example",
            "format": "example"
        }
    }
}

Example response Example

json
{
    "data": {
        "id": 41,
        "action": "market.create_listing",
        "risk": "reversible",
        "status": "done",
        "needs": null,
        "summary": "Add the draft listing “Sponsored article on Lumen blog”",
        "diff": [
            {
                "op": "+",
                "kind": "Title",
                "name": "",
                "details": [],
                "before": null,
                "after": "Sponsored article on Lumen blog"
            }
        ],
        "requested_by": "Token “Claude Code”",
        "note": null,
        "error": null,
        "result": {
            "summary": "Draft listing saved. It is private until you send it to editors from the editor.",
            "listing": "sponsored-article-on-lumen-blog"
        },
        "confirm_url": null,
        "created_at": "2026-10-19T09:00:00+00:00",
        "decided_at": null
    },
    "meta": {
        "outcome": "done",
        "module": "market",
        "mode": "hybrid",
        "hint": null
    }
}

Errors

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

update_market_listing

PATCH /api/v1/market/listings/{listing}

Edit one of your listings (a draft, or a published one: its live version stays until editors review the edit, which you send from the editor). Fields you send replace those fields. A listing with the editors cannot be changed meanwhile. 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 update_market_listing Scope write:market Plan Pro and above

Parameters

NameInTypeRequiredDescription
listing path string Yes Slug of one of your listings (see list_market_listings).
title body string No Title, up to 140 characters.
format body string No What is sold or needed, e.g. sponsored_article, review, newsletter_sponsorship, social_post, other.
summary body string No One or two sentences, up to 600 characters.
description body string No Longer text, up to 2,500 characters.
compensation body string No How it is settled. One of: money, swap, either.
swap_give body string No What you give in exchange (required for a swap).
pricing_model body string No How it is priced. One of: fixed, from, negotiable, on_request.
price body number No Amount in whole units (required for fixed and from prices), never invented.
currency body string No USD, EUR, GBP or UAH.
audience_language body string No Audience language code, e.g. en.
audience_country body string No Audience country or region key, e.g. us or global.
topics body array<string> No Up to 5 topic keys.
site_url body string No The address of the site or channel, https.
details body object No Optional package, duration, placement, materials, restrictions (short texts).
timing_note body string No Your own estimate of timing, up to 160 characters.

Example request

bash
curl -X PATCH "https://woodander.com/api/v1/market/listings/example" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "update_market_listing",
        "arguments": {
            "listing": "example"
        }
    }
}

Example response Example

json
{
    "data": {
        "id": 41,
        "action": "market.update_listing",
        "risk": "reversible",
        "status": "pending",
        "needs": "apply",
        "summary": "Update the listing “Sponsored article on Lumen blog” (price)",
        "diff": [
            {
                "op": "~",
                "kind": "Price",
                "name": "",
                "details": [],
                "before": "220",
                "after": "240"
            }
        ],
        "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": {
        "outcome": "proposed",
        "module": "market",
        "mode": "manual",
        "hint": null
    }
}

Errors

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

pause_market_listing

POST /api/v1/market/listings/{listing}/pause

Pause one of your published listings: it disappears from Market until you resume it in the editor. Only hides; nothing is deleted. 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 pause_market_listing Scope write:market Plan Pro and above

Parameters

NameInTypeRequiredDescription
listing path string Yes Slug of one of your listings (see list_market_listings).

Example request

bash
curl -X POST "https://woodander.com/api/v1/market/listings/example/pause" \
  -H "Authorization: Bearer wdr_..."
tools/call
{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "pause_market_listing",
        "arguments": {
            "listing": "example"
        }
    }
}

Example response Example

json
{
    "data": {
        "id": 41,
        "action": "market.pause_listing",
        "risk": "reversible",
        "status": "done",
        "needs": null,
        "summary": "Pause the listing “Sponsored article on Lumen blog”",
        "diff": [],
        "requested_by": "Token “Claude Code”",
        "note": null,
        "error": null,
        "result": {
            "summary": "Listing paused.",
            "listing": "sponsored-article-on-lumen-blog"
        },
        "confirm_url": null,
        "created_at": "2026-10-19T09:00:00+00:00",
        "decided_at": null
    },
    "meta": {
        "outcome": "done",
        "module": "market",
        "mode": "hybrid",
        "hint": null
    }
}

Errors

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