Your Discover products: page text, leads, reviews, analytics, and changes proposed under the AI mode you choose.
GET
/api/v1/products
Your Discover projects.
MCP tool list_products
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
limit
query
integer
No
Page size, 1 to 100.
cursor
query
string
No
meta.next_cursor of the previous page.
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/products" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "list_products" ,
"arguments" : {}
}
}
Example response Example
json Copiar
{
"data" : [
{
"slug" : "lumen-notes" ,
"name" : "Lumen Notes" ,
"website_url" : "https://lumen.example" ,
"short_description" : "Notes that think." ,
"status" : "published" ,
"claim_status" : "claimed" ,
"category" : "productivity" ,
"logo_url" : null ,
"public_url" : "https://woodander.com/products/lumen-notes" ,
"published_at" : "2026-09-01T08:00:00+00:00"
}
],
"meta" : {
"next_cursor" : null ,
"limit" : 25 ,
"total" : 1
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
422 invalid_requestA parameter is not valid (range, type, cursor).
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/products/{slug}
One of your projects with its full description.
MCP tool get_product
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see list_products).
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/products/lumen-notes" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "get_product" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : {
"slug" : "lumen-notes" ,
"name" : "Lumen Notes" ,
"description" : "Long text" ,
"pricing_model" : "freemium" ,
"platforms" : [
"web"
],
"status" : "published"
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/products/{slug}/analytics
Views, outbound clicks, visitors, leads, daily series, referrers and campaigns. Ranges over 30 days need the advanced analytics plan feature.
MCP tool product_analytics
Scope read:analytics
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see list_products).
range
query
string
No
Period. Default 30d. One of: 7d, 30d, 90d, 365d.
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/products/lumen-notes/analytics" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "product_analytics" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : {
"product" : "lumen-notes" ,
"range" : {
"days" : 30 ,
"from" : "2026-09-18" ,
"to" : "2026-10-17"
},
"totals" : {
"views" : 900 ,
"clicks" : 120 ,
"visitors" : 640 ,
"ctr" : 13.3 ,
"leads" : 4
},
"daily" : [
{
"date" : "2026-10-17" ,
"views" : 30 ,
"clicks" : 4
}
],
"referrers" : [
{
"name" : "Direct" ,
"views" : 400
}
],
"campaigns" : []
},
"meta" : {
"range_limited" : false
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:analytics scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 invalid_requestA parameter is not valid (range, type, cursor).
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/discover/products
Your Discover projects with the AI mode you set for each (manual, hybrid, autonomous) and how many changes wait for you.
MCP tool discover_list_products
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
limit
query
integer
No
Page size, 1 to 100.
cursor
query
string
No
meta.next_cursor of the previous page.
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/discover/products" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_list_products" ,
"arguments" : {}
}
}
Example response Example
json Copiar
{
"data" : [
{
"slug" : "lumen-notes" ,
"name" : "Lumen Notes" ,
"website_url" : "https://lumen.example" ,
"short_description" : "Notes that think." ,
"status" : "published" ,
"claim_status" : "claimed" ,
"category" : "productivity" ,
"logo_url" : null ,
"public_url" : "https://woodander.com/products/lumen-notes" ,
"published_at" : "2026-09-01T08:00:00+00:00" ,
"mode" : "manual" ,
"pending_changes" : 1
}
],
"meta" : {
"next_cursor" : null ,
"limit" : 25 ,
"total" : 1
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
422 invalid_requestA parameter is not valid (range, type, cursor).
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/discover/products/{slug}
The full page of one of your products: the live version, your working draft (with what still blocks a submit), the review state, every language and the Briefs left this month.
MCP tool discover_product_page
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/discover/products/lumen-notes" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_product_page" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : {
"slug" : "lumen-notes" ,
"name" : "Lumen Notes" ,
"website_url" : "https://lumen.example" ,
"short_description" : "Notes that think." ,
"status" : "published" ,
"claim_status" : "claimed" ,
"category" : "productivity" ,
"logo_url" : null ,
"public_url" : "https://woodander.com/products/lumen-notes" ,
"published_at" : "2026-09-01T08:00:00+00:00" ,
"mode" : "manual" ,
"source_locale" : "en" ,
"live" : {
"name" : "Lumen Notes" ,
"website_url" : "https://lumen.example" ,
"short_description" : "Notes that think." ,
"description" : "Long text" ,
"highlights" : [
"Backlinks"
],
"faq" : [
{
"question" : "Is there a free plan?" ,
"answer" : "Yes."
}
],
"links" : [
{
"label" : "Docs" ,
"url" : "https://lumen.example/docs"
}
],
"screenshots" : [
{
"url" : "https://woodander.com/storage/discover/1/screenshots/a.png" ,
"alt" : "Editor"
}
],
"video_url" : null ,
"cta_label" : null ,
"pricing" : "freemium" ,
"pricing_model" : null ,
"platforms" : [
"web"
]
},
"draft" : {
"name" : "Lumen Notes" ,
"website_url" : "https://lumen.example" ,
"short_description" : "Notes that think." ,
"description" : "Long text" ,
"highlights" : [
"Backlinks"
],
"faq" : [
{
"question" : "Is there a free plan?" ,
"answer" : "Yes."
}
],
"links" : [
{
"label" : "Docs" ,
"url" : "https://lumen.example/docs"
}
],
"screenshots" : [
{
"url" : "https://woodander.com/storage/discover/1/screenshots/a.png" ,
"alt" : "Editor"
}
],
"video_url" : null ,
"cta_label" : null ,
"pricing" : "freemium" ,
"pricing_model" : null ,
"platforms" : [
"web"
],
"unsubmitted_edits" : true ,
"problems" : [],
"edited_at" : "2026-10-19T08:00:00+00:00"
},
"review" : {
"status" : "in_review" ,
"submitted_at" : "2026-10-18T08:00:00+00:00"
},
"languages" : [
{
"locale" : "uk" ,
"status" : "draft" ,
"short_description" : "" ,
"description" : "" ,
"highlights" : [],
"faq" : []
}
],
"newsroom" : {
"briefs_left_this_month" : 28 ,
"url" : "https://woodander.com/newsroom/lumen-notes"
}
},
"meta" : {
"how_changes_go_live" : "Page edits go to your draft; ..."
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/discover/products/{slug}/leads
Leads from the lead form of one of your projects, newest first, with their status.
MCP tool discover_leads
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
status
query
string
No
Only leads with this status. One of: new, contacted, archived.
limit
query
integer
No
Page size, 1 to 100.
cursor
query
string
No
meta.next_cursor of the previous page.
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/discover/products/lumen-notes/leads" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_leads" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : [
{
"id" : 7 ,
"name" : "Ada" ,
"email" : "ada@example.com" ,
"company" : "Analytical" ,
"message" : "Do you have a team plan?" ,
"status" : "new" ,
"referrer" : null ,
"created_at" : "2026-10-18T10:00:00+00:00"
}
],
"meta" : {
"next_cursor" : null ,
"limit" : 25 ,
"total" : 1 ,
"product" : "lumen-notes"
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 invalid_requestA parameter is not valid (range, type, cursor).
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/discover/products/{slug}/reviews
Published reviews of one of your projects with your replies, newest first.
MCP tool discover_reviews
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
limit
query
integer
No
Page size, 1 to 100.
cursor
query
string
No
meta.next_cursor of the previous page.
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/discover/products/lumen-notes/reviews" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_reviews" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : [
{
"id" : 4 ,
"rating" : 5 ,
"body" : "Lovely tool for linked notes, the backlinks are great." ,
"author" : "Grace" ,
"reply" : null ,
"replied_at" : null ,
"created_at" : "2026-10-17T10:00:00+00:00"
}
],
"meta" : {
"next_cursor" : null ,
"limit" : 25 ,
"total" : 1 ,
"product" : "lumen-notes"
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 invalid_requestA parameter is not valid (range, type, cursor).
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/discover/products/{slug}/analytics
Views, outbound clicks, visitors, leads, daily series, referrers and campaigns of one of your projects (as product_analytics). Ranges over 30 days need the advanced analytics plan feature.
MCP tool discover_analytics
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
range
query
string
No
Period. Default 30d. One of: 7d, 30d, 90d, 365d.
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/discover/products/lumen-notes/analytics" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_analytics" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : {
"product" : "lumen-notes" ,
"range" : {
"days" : 30 ,
"from" : "2026-09-20" ,
"to" : "2026-10-19"
},
"totals" : {
"views" : 900 ,
"clicks" : 120 ,
"visitors" : 640 ,
"ctr" : 13.3 ,
"leads" : 4
},
"daily" : [],
"referrers" : [],
"campaigns" : []
},
"meta" : {
"range_limited" : false
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 invalid_requestA parameter is not valid (range, type, cursor).
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/discover/products/{slug}/changes
The last 50 change requests for one of your products: proposals and confirmations waiting for you, and what ran.
MCP tool discover_list_changes
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/discover/products/lumen-notes/changes" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_list_changes" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : [
{
"id" : 31 ,
"action" : "discover.update_page" ,
"risk" : "reversible" ,
"status" : "pending" ,
"needs" : "apply" ,
"summary" : "Update the draft of Lumen Notes (tagline)" ,
"diff" : [
{
"op" : "~" ,
"kind" : "Tagline" ,
"name" : "" ,
"details" : [],
"before" : "Notes that think." ,
"after" : "Notes that link themselves."
}
],
"requested_by" : "Token “Claude Code”" ,
"note" : null ,
"error" : null ,
"result" : null ,
"confirm_url" : "https://woodander.com/workspace/discover/products/lumen-notes/ai-changes?change=31" ,
"created_at" : "2026-10-19T09:00:00+00:00" ,
"decided_at" : null
}
],
"meta" : {
"total" : 1 ,
"product" : "lumen-notes" ,
"mode" : "manual"
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
429 rate_limitedToo many requests. See the Retry-After header.
GET
/api/v1/discover/changes/{id}
One change request by id: its status (pending, done, failed, rejected), what it waits for and the result.
MCP tool discover_change_status
Scope read:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
id
path
integer
Yes
The id a change request returned.
Example request
curl
MCP
bash Copiar
curl "https://woodander.com/api/v1/discover/changes/12" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_change_status" ,
"arguments" : {
"id" : 12
}
}
}
Example response Example
json Copiar
{
"data" : {
"id" : 31 ,
"action" : "discover.post_brief" ,
"risk" : "publish" ,
"status" : "done" ,
"needs" : null ,
"summary" : "Publish the Brief “Lumen 2.0 is out” in the Newsroom of Lumen Notes" ,
"diff" : [],
"requested_by" : "Token “Claude Code”" ,
"note" : null ,
"error" : null ,
"result" : {
"summary" : "Brief published in your Newsroom." ,
"brief_id" : 12
},
"confirm_url" : null ,
"created_at" : "2026-10-19T09:00:00+00:00" ,
"decided_at" : null
},
"meta" : {
"outcome" : "done" ,
"mode" : "hybrid" ,
"hint" : null
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the read:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
429 rate_limitedToo many requests. See the Retry-After header.
PATCH
/api/v1/discover/products/{slug}/page
Change the tagline, description, highlights, FAQ or links of one of your projects. Same rules as the Workspace editor: it goes into your draft (or, with locale, that language's draft), never straight onto the live page; submit: true also sends the draft to Woodander editors, who approve it before the page changes. Fields you send replace those fields; the others stay. Manual mode: stored as a proposal the owner applies.
MCP tool discover_update_page
Scope write:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
locale
body
string
No
A language edition other than the project's own, e.g. uk or de: edits that language's draft (not links, not submit). A published language is refused: the owner edits it under Languages.
short_description
body
string
No
Tagline, up to 80 characters.
description
body
string
No
What it does, 80 to 600 characters.
highlights
body
array<string>
No
Up to 6 short highlights.
faq
body
array<object>
No
Up to 10 entries {"question", "answer"}, both required.
links
body
array<object>
No
Up to 6 extra links {"label", "url"}.
submit
body
boolean
No
Also send the draft to Woodander editors (needs a complete draft and a confirmed email).
Example request
curl
MCP
bash Copiar
curl -X PATCH "https://woodander.com/api/v1/discover/products/lumen-notes/page" \
-H "Authorization: Bearer wdr_..."
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_update_page" ,
"arguments" : {
"slug" : "lumen-notes"
}
}
}
Example response Example
json Copiar
{
"data" : {
"id" : 31 ,
"action" : "discover.update_page" ,
"risk" : "reversible" ,
"status" : "pending" ,
"needs" : "apply" ,
"summary" : "Update the draft of Lumen Notes (tagline)" ,
"diff" : [
{
"op" : "~" ,
"kind" : "Tagline" ,
"name" : "" ,
"details" : [],
"before" : "Notes that think." ,
"after" : "Notes that link themselves."
}
],
"requested_by" : "Token “Claude Code”" ,
"note" : null ,
"error" : null ,
"result" : null ,
"confirm_url" : "https://woodander.com/workspace/discover/products/lumen-notes/ai-changes?change=31" ,
"created_at" : "2026-10-19T09:00:00+00:00" ,
"decided_at" : null
},
"meta" : {
"outcome" : "proposed" ,
"mode" : "manual" ,
"hint" : null
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the write:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 validation_failedThe body is not valid; details.errors names the fields.
429 rate_limitedToo many requests. See the Retry-After header.
POST
/api/v1/discover/products/{slug}/screenshots
Add a screenshot to the draft of one of your projects from a public https image address (PNG, JPG or WebP, at least 1200 × 650, cropped to 16:10, up to 8 MB, at most 8 screenshots). Downloaded when it runs; the page shows it after the draft is submitted and approved.
MCP tool discover_add_screenshot_from_url
Scope write:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
url
body
string
Yes
https address of the image (no redirects, public hosts only).
alt
body
string
No
Alt text, up to 150 characters.
Example request
curl
MCP
bash Copiar
curl -X POST "https://woodander.com/api/v1/discover/products/lumen-notes/screenshots" \
-H "Authorization: Bearer wdr_..." \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/"}'
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_add_screenshot_from_url" ,
"arguments" : {
"slug" : "lumen-notes" ,
"url" : "https://example.com/"
}
}
}
Example response Example
json Copiar
{
"data" : {
"id" : 31 ,
"action" : "discover.add_screenshot_from_url" ,
"risk" : "reversible" ,
"status" : "done" ,
"needs" : null ,
"summary" : "Add a screenshot to the draft of Lumen Notes" ,
"diff" : [
{
"op" : "+" ,
"kind" : "Screenshot" ,
"name" : "" ,
"details" : [
"https://lumen.example/shot.png"
]
}
],
"requested_by" : "Token “Claude Code”" ,
"note" : null ,
"error" : null ,
"result" : {
"summary" : "Screenshot added to your draft." ,
"draft_id" : 3 ,
"path" : "discover/1/screenshots/a.png"
},
"confirm_url" : null ,
"created_at" : "2026-10-19T09:00:00+00:00" ,
"decided_at" : null
},
"meta" : {
"outcome" : "done" ,
"mode" : "hybrid" ,
"hint" : null
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the write:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 validation_failedThe body is not valid; details.errors names the fields.
429 rate_limitedToo many requests. See the Retry-After header.
POST
/api/v1/discover/products/{slug}/briefs
Publish a Newsroom Brief for one of your products: short news, live at once, within the monthly quota (see discover_product_page). Public, so in Manual and Hybrid it waits for the owner's confirmation (confirm_url); in Autonomous it is published.
MCP tool discover_post_brief
Scope write:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
title
body
string
Yes
Up to 120 characters.
body
body
string
Yes
40 to 1200 characters, up to 3 paragraphs, no markup.
source_url
body
string
No
A link to the source (http or https).
Example request
curl
MCP
bash Copiar
curl -X POST "https://woodander.com/api/v1/discover/products/lumen-notes/briefs" \
-H "Authorization: Bearer wdr_..." \
-H "Content-Type: application/json" \
-d '{"title":"example","body":"example"}'
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_post_brief" ,
"arguments" : {
"slug" : "lumen-notes" ,
"title" : "example" ,
"body" : "example"
}
}
}
Example response Example
json Copiar
{
"data" : {
"id" : 31 ,
"action" : "discover.post_brief" ,
"risk" : "publish" ,
"status" : "pending" ,
"needs" : "confirm" ,
"summary" : "Publish the Brief “Lumen 2.0 is out” in the Newsroom of Lumen Notes" ,
"diff" : [
{
"op" : "+" ,
"kind" : "Brief" ,
"name" : "Lumen 2.0 is out" ,
"details" : [],
"before" : null ,
"after" : "Linked notes, a new editor and ..."
}
],
"requested_by" : "Token “Claude Code”" ,
"note" : null ,
"error" : null ,
"result" : null ,
"confirm_url" : "https://woodander.com/workspace/discover/products/lumen-notes/ai-changes?change=31" ,
"created_at" : "2026-10-19T09:00:00+00:00" ,
"decided_at" : null
},
"meta" : {
"outcome" : "pending_confirmation" ,
"mode" : "hybrid" ,
"hint" : null
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the write:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 validation_failedThe body is not valid; details.errors names the fields.
429 rate_limitedToo many requests. See the Retry-After header.
POST
/api/v1/discover/products/{slug}/reviews/{review_id}/reply
Publish your reply under a review of one of your projects (one reply per review; a new one replaces it). Public, so in Manual and Hybrid it waits for the owner's confirmation (confirm_url).
MCP tool discover_reply_review
Scope write:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
review_id
path
integer
Yes
Review id (see discover_reviews).
reply
body
string
Yes
Up to 1000 characters.
Example request
curl
MCP
bash Copiar
curl -X POST "https://woodander.com/api/v1/discover/products/lumen-notes/reviews/12/reply" \
-H "Authorization: Bearer wdr_..." \
-H "Content-Type: application/json" \
-d '{"reply":"example"}'
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_reply_review" ,
"arguments" : {
"slug" : "lumen-notes" ,
"review_id" : 12 ,
"reply" : "example"
}
}
}
Example response Example
json Copiar
{
"data" : {
"id" : 31 ,
"action" : "discover.reply_review" ,
"risk" : "publish" ,
"status" : "pending" ,
"needs" : "confirm" ,
"summary" : "Reply to the review by Grace (5★) of Lumen Notes" ,
"diff" : [
{
"op" : "+" ,
"kind" : "Reply" ,
"name" : "" ,
"details" : [
"Review: Lovely tool ..."
],
"before" : null ,
"after" : "Thank you, Grace!"
}
],
"requested_by" : "Token “Claude Code”" ,
"note" : null ,
"error" : null ,
"result" : null ,
"confirm_url" : "https://woodander.com/workspace/discover/products/lumen-notes/ai-changes?change=31" ,
"created_at" : "2026-10-19T09:00:00+00:00" ,
"decided_at" : null
},
"meta" : {
"outcome" : "pending_confirmation" ,
"mode" : "hybrid" ,
"hint" : null
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the write:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 validation_failedThe body is not valid; details.errors names the fields.
429 rate_limitedToo many requests. See the Retry-After header.
PATCH
/api/v1/discover/products/{slug}/leads/{lead_id}
Mark a lead of one of your projects new, contacted or archived.
MCP tool discover_update_lead_status
Scope write:products
Plan Pro and above, or the Project Pro pass
Parameters
Name In Type Required Description
slug
path
string
Yes
Slug of one of your projects (see discover_list_products).
lead_id
path
integer
Yes
Lead id (see discover_leads).
status
body
string
Yes
The new status. One of: new, contacted, archived.
Example request
curl
MCP
bash Copiar
curl -X PATCH "https://woodander.com/api/v1/discover/products/lumen-notes/leads/12" \
-H "Authorization: Bearer wdr_..." \
-H "Content-Type: application/json" \
-d '{"status":"new"}'
tools/call Copiar
{
"jsonrpc" : "2.0" ,
"id" : 1 ,
"method" : "tools/call" ,
"params" : {
"name" : "discover_update_lead_status" ,
"arguments" : {
"slug" : "lumen-notes" ,
"lead_id" : 12 ,
"status" : "new"
}
}
}
Example response Example
json Copiar
{
"data" : {
"id" : 31 ,
"action" : "discover.update_lead_status" ,
"risk" : "reversible" ,
"status" : "done" ,
"needs" : null ,
"summary" : "Mark the lead from Ada as contacted" ,
"diff" : [
{
"op" : "~" ,
"kind" : "Lead status" ,
"name" : "Ada" ,
"details" : [],
"before" : "new" ,
"after" : "contacted"
}
],
"requested_by" : "Token “Claude Code”" ,
"note" : null ,
"error" : null ,
"result" : {
"summary" : "Lead marked as contacted." ,
"lead_id" : 7
},
"confirm_url" : null ,
"created_at" : "2026-10-19T09:00:00+00:00" ,
"decided_at" : null
},
"meta" : {
"outcome" : "done" ,
"mode" : "hybrid" ,
"hint" : null
}
}
Errors
HTTP Code Meaning
401 unauthenticatedMissing, invalid, expired or revoked token.
403 insufficient_scopeThe token does not have the write:products scope.
403 plan_requiredThe plan does not include API access.
404 not_foundNot found, or not yours.
422 validation_failedThe body is not valid; details.errors names the fields.
429 rate_limitedToo many requests. See the Retry-After header.