Workflowy Nodes API
Create, read, update, move, complete, and delete outline nodes.
Create, read, update, move, complete, and delete outline nodes.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/workflowy-nodes-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Workflowy Nodes API
description: Official Workflowy REST API for reading and writing Workflowy data programmatically. A node is the fundamental unit of content in Workflowy - each node is a single bullet point that can contain text, have child nodes, and be organized hierarchically. Targets provide quick access to specific nodes, including system targets (like "inbox") and user-defined shortcuts. This OpenAPI document was generated by API Evangelist from the official API reference at https://workflowy.com/api-reference/ - Workflowy does not publish its own machine-readable spec.
version: v1
contact:
name: Workflowy
url: https://workflowy.com/api-reference/
servers:
- url: https://workflowy.com/api/v1
description: Production
security:
- apiKey: []
tags:
- name: Nodes
description: Create, read, update, move, complete, and delete outline nodes.
paths:
/nodes:
post:
operationId: createNode
tags:
- Nodes
summary: Create a node
description: Creates a new node under the given parent. Calendar nodes are created on demand if they don't exist yet. Markdown in `name` is parsed into inline HTML and layout modes; multiline `name` text creates child nodes (`\n` joins into a space, `\n\n` creates separate children).
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- name
properties:
parent_id:
$ref: '#/components/schemas/ParentTarget'
name:
type: string
description: The text content of the new node. Markdown inline styles (bold, italic, strikethrough, code, links, dates) and layout prefixes ("#", "##", "###", "-", "- [ ]", "- [x]", code fence, ">") are parsed.
layoutMode:
$ref: '#/components/schemas/LayoutMode'
note:
type: string
description: Additional note content shown below the main text.
position:
type: string
enum:
- top
- bottom
default: top
description: Where to place the new node.
example:
parent_id: inbox
name: Hello API
position: top
responses:
'200':
description: Node created.
content:
application/json:
schema:
type: object
properties:
item_id:
type: string
example:
item_id: 5b401959-4740-4e1a-905a-62a961daa8c9
get:
operationId: listNodes
tags:
- Nodes
summary: List nodes
description: Returns a list of child nodes for a given parent. Nodes are returned unordered - sort them yourself based on the `priority` field. Calendar keys return 404 if the node hasn't been created yet; use Create or Move to materialize it first.
parameters:
- name: parent_id
in: query
description: Whose children to list. Accepts a full node id, 12-character short id, node URL, a shortcut key, "None" (root), "inbox", or calendar targets (calendar, today, tomorrow, next_week, YYYY, YYYY-MM, YYYY-MM-DD).
schema:
type: string
example: inbox
responses:
'200':
description: Child nodes (unordered).
content:
application/json:
schema:
type: object
properties:
nodes:
type: array
items:
$ref: '#/components/schemas/Node'
'404':
description: Calendar key target that has not been created yet.
/nodes/{id}:
post:
operationId: updateNode
tags:
- Nodes
summary: Update a node
description: Updates the specified node by setting the values of the parameters passed. Any parameters not provided are left unchanged. Markdown in `name` is parsed into inline HTML and layout modes.
parameters:
- $ref: '#/components/parameters/nodeId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
layoutMode:
$ref: '#/components/schemas/LayoutMode'
note:
type: string
example:
name: Updated node title
responses:
'200':
$ref: '#/components/responses/StatusOk'
get:
operationId: getNode
tags:
- Nodes
summary: Retrieve a node
description: Retrieves the details of an existing node. Supply either the full node ID, short node ID, or an existing calendar target (calendar, today, tomorrow, next_week, YYYY, YYYY-MM, YYYY-MM-DD). Calendar targets resolve existing calendar structure nodes and do not create missing nodes.
parameters:
- $ref: '#/components/parameters/nodeId'
responses:
'200':
description: The node.
content:
application/json:
schema:
type: object
properties:
node:
$ref: '#/components/schemas/Node'
delete:
operationId: deleteNode
tags:
- Nodes
summary: Delete a node
description: Permanently deletes a node. This cannot be undone.
parameters:
- $ref: '#/components/parameters/nodeId'
responses:
'200':
$ref: '#/components/responses/StatusOk'
/nodes/{id}/move:
post:
operationId: moveNode
tags:
- Nodes
summary: Move a node
description: Relocates a node to a different parent. Calendar nodes are created on demand if they don't exist yet.
parameters:
- $ref: '#/components/parameters/nodeId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
parent_id:
$ref: '#/components/schemas/ParentTarget'
position:
type: string
enum:
- top
- bottom
default: top
example:
parent_id: inbox
position: top
responses:
'200':
$ref: '#/components/responses/StatusOk'
/nodes/{id}/complete:
post:
operationId: completeNode
tags:
- Nodes
summary: Complete a node
description: Marks a node as completed. Sets the completion timestamp and updates the node's status.
parameters:
- $ref: '#/components/parameters/nodeId'
responses:
'200':
$ref: '#/components/responses/StatusOk'
/nodes/{id}/uncomplete:
post:
operationId: uncompleteNode
tags:
- Nodes
summary: Uncomplete a node
description: Marks a node as not completed. Removes the completion timestamp and updates the node's status.
parameters:
- $ref: '#/components/parameters/nodeId'
responses:
'200':
$ref: '#/components/responses/StatusOk'
/nodes-export:
get:
operationId: exportNodes
tags:
- Nodes
summary: Export all nodes
description: 'Returns all of the user''s nodes as a flat list. Each node includes its `parent_id` field to reconstruct the hierarchy. Nodes are returned unordered - build the tree yourself from `parent_id` and `priority`. Rate limit: 1 request per minute due to potentially large response size.'
responses:
'200':
description: All nodes as a flat list.
content:
application/json:
schema:
type: object
properties:
nodes:
type: array
items:
$ref: '#/components/schemas/ExportNode'
components:
schemas:
ParentTarget:
type: string
description: A parent reference - full node id, 12-character short id, node URL, a user-defined shortcut key, "None" (root), "inbox", or calendar targets ("calendar", "today", "tomorrow", "next_week", "YYYY", "YYYY-MM", "YYYY-MM-DD").
example: inbox
Node:
type: object
description: A node is a single bullet point that can contain text, have child nodes, and be organized hierarchically.
properties:
id:
type: string
description: Unique identifier of the node.
parent_id:
type:
- string
- 'null'
description: Unique identifier of the parent node. `null` for top-level nodes.
name:
type: string
description: The text content of the node. Supports inline HTML tags <b>, <i>, <s>, <code>, <a href="">.
note:
type:
- string
- 'null'
description: Additional note content shown below the main text.
priority:
type: number
description: Sort order of the node among its siblings. Lower values appear first.
data:
type: object
properties:
layoutMode:
$ref: '#/components/schemas/LayoutMode'
createdAt:
type: number
description: Unix timestamp when the node was created.
modifiedAt:
type: number
description: Unix timestamp when the node was last modified.
completedAt:
type:
- number
- 'null'
description: Unix timestamp when the node was completed. `null` if not completed.
example:
id: 6ed4b9ca-256c-bf2e-bd70-d8754237b505
parent_id: 5b401959-4740-4e1a-905a-62a961daa8c9
name: This is a test outline for API examples
note: null
priority: 200
data:
layoutMode: bullets
createdAt: 1753120779
modifiedAt: 1753120850
completedAt: null
ExportNode:
allOf:
- $ref: '#/components/schemas/Node'
- type: object
properties:
completed:
type: boolean
description: Whether the node is completed (export endpoint only).
LayoutMode:
type: string
description: Display mode of the node.
enum:
- bullets
- todo
- h1
- h2
- h3
- code-block
- quote-block
parameters:
nodeId:
name: id
in: path
required: true
description: The node ID, 12-character short ID, or calendar target.
schema:
type: string
responses:
StatusOk:
description: Operation succeeded.
content:
application/json:
schema:
type: object
properties:
status:
type: string
example:
status: ok
securitySchemes:
apiKey:
type: http
scheme: bearer
description: Workflowy API key sent as a bearer token in the Authorization header. Generate a key at https://workflowy.com/api-key/.
x-generated: '2026-07-21'
x-method: generated
x-source: https://workflowy.com/api-reference/ (verbatim markdown at https://workflowy.com/api-reference.md)