API Reference
WorkFlowy API

Nodes

A node is the fundamental unit of content in WorkFlowy. Each node represents a single bullet point that can contain text, have child nodes, and be organized hierarchically. Nodes can be expanded or collapsed, completed, tagged, and moved around to create flexible outlines and lists.

ENDPOINTS

POST/api/nodes
POST/api/nodes/:id
GET/api/nodes/:id
GET/api/nodes
DELETE/api/nodes/:id

The Node object

Attributes

  • id string

    Unique identifier of the node.

  • name string

    The text content of the node. This is the main bullet text that appears in your outline.

  • note string | null

    Additional note content for the node. Notes appear below the main text and can contain extended descriptions or details.

  • priority number

    Sort order of the node among its siblings. Lower values appear first.

  • data.layoutMode string

    Display mode of the node. Common values include "bullets" (default), "todo", "h1", "h2", "h3".

  • createdAt number

    Unix timestamp indicating when the node was created.

  • modifiedAt number

    Unix timestamp indicating when the node was last modified.

  • completedAt number | null

    Unix timestamp indicating when the node was completed. null if the node is not completed.

The Node object

{
  "id": "6ed4b9ca-256c-bf2e-bd70-d8754237b505",
  "name": "This is a test outline for API examples",
  "note": null,
  "priority": 200,
  "data": {
    "layoutMode": "bullets"
  },
  "createdAt": 1753120779,
  "modifiedAt": 1753120850,
  "completedAt": null
}
      

Create a node

Parameters

  • parent_id string

    The parent node identifier. Can be either a node UUID (e.g., "6ed4b9ca-256c-bf2e-bd70-d8754237b505"), a target key (e.g., "home", "inbox"), or "None" to create a top-level node. See List targets to get your available target keys.

  • name string required

    The text content of the new node.

  • note string

    Additional note content for the node. Notes appear below the main text.

  • layoutMode string

    The display mode of the node. Common values include "bullets" (default), "todo", "h1", "h2", "h3".

  • position string

    Where to place the new node. Options: "top" (default) or "bottom".

POST /api/v1/nodes

curl -X POST https://workflowy.com/api/v1/nodes \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -d '{
    "parent_id": "inbox",
    "name": "Hello API",
    "position": "top"
  }' | jq
      

Response

{
  "item_id": "5b401959-4740-4e1a-905a-62a961daa8c9"
}
      

Update a node

Updates the specified node by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Parameters

  • id string required

    The identifier of the node to update.

  • name string

    The text content of the node.

  • note string

    The note content of the node.

  • layoutMode string

    The display mode of the node.

POST /api/v1/nodes/:id

curl -X POST https://workflowy.com/api/v1/nodes/:id \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -d '{
    "name": "Updated node title"
  }' | jq
      

Response

{
  "status": "ok"
}
      

Retrieve a node

Retrieves the details of an existing node. Supply the unique node ID and WorkFlowy will return the corresponding node information.

Parameters

  • id string required

    The identifier of the node to retrieve.

GET /api/v1/nodes/:id

curl -X GET https://workflowy.com/api/v1/nodes/:id \
  -H "Authorization: Bearer <YOUR_API_KEY>" | jq
      

Response

{
  "node": {
    "id": "6ed4b9ca-256c-bf2e-bd70-d8754237b505",
    "name": "This is a test outline for API examples",
    "note": null,
    "priority": 200,
    "data": {
      "layoutMode": "bullets"
    },
    "createdAt": 1753120779,
    "modifiedAt": 1753120850,
    "completedAt": null
  }
}
      

List nodes

Returns a list of child nodes for a given parent. The nodes are returned unordered - you need to sort them yourself based on the priority field.

Parameters

  • parent_id string

    The parent node identifier. Can be either a node UUID (e.g., "6ed4b9ca-256c-bf2e-bd70-d8754237b505"), a target key (e.g., "home", "inbox"), or "None" to list top-level nodes. See List targets to get your available target keys.

GET /api/v1/nodes

curl -G https://workflowy.com/api/v1/nodes \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -d "parent_id=inbox" | jq
      

Response

{
  "nodes": [
    {
      "id": "ee1ac4c4-775e-1983-ae98-a8eeb92b1aca",
      "name": "Bullet A",
      "note": null,
      "priority": 100,
      "data": {
        "layoutMode": "bullets"
      },
      "createdAt": 1753120787,
      "modifiedAt": 1753120815,
      "completedAt": null
    }
  ]
}
      

Delete a node

Permanently deletes a node. This cannot be undone.

Parameters

  • id string required

    The identifier of the node to delete.

DELETE /api/v1/nodes/:id

curl -X DELETE https://workflowy.com/api/v1/nodes/:id \
  -H "Authorization: Bearer <YOUR_API_KEY>" | jq
      

Response

{
  "status": "ok"
}
      

Move a node

Parameters

  • parent_id string

    The new parent node identifier. Can be either a node UUID (e.g., "6ed4b9ca-256c-bf2e-bd70-d8754237b505"), a target key (e.g., "home", "inbox"), or "None" to move to top-level. See List targets to get your available target keys.

  • position string

    Where to place the node. Options: "top" (default) or "bottom".

POST /api/v1/nodes/:id/move

curl -X POST https://workflowy.com/api/v1/nodes/<NODE_ID>/move \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -d '{
    "parent_id": "inbox",
    "position": "top"
  }' | jq
      

Response

{
  "status": "ok"
}
      

Complete a node

Marks a node as completed. This sets the completion timestamp and updates the node's status.

Parameters

  • id string required

    The identifier of the node to complete.

POST /api/v1/nodes/:id/complete

curl -X POST https://workflowy.com/api/v1/nodes/:id/complete \
  -H "Authorization: Bearer <YOUR_API_KEY>" | jq
      

Response

{
  "status": "ok"
}
      

Uncomplete a node

Marks a node as not completed. This removes the completion timestamp and updates the node's status.

Parameters

  • id string required

    The identifier of the node to uncomplete.

POST /api/v1/nodes/:id/uncomplete

curl -X POST https://workflowy.com/api/v1/nodes/:id/uncomplete \
  -H "Authorization: Bearer <YOUR_API_KEY>" | jq
      

Response

{
  "status": "ok"
}
      

Export all nodes

Returns all user's nodes as a flat list. Each node includes its parent_id field to reconstruct the hierarchy. The nodes are returned unordered - you need to build the tree structure yourself based on the parent_id and priority fields.

Note: This endpoint has a rate limit of 1 request per minute due to the potentially large response size.

GET /api/v1/nodes-export

curl https://workflowy.com/api/v1/nodes-export \
  -H "Authorization: Bearer <YOUR_API_KEY>" | jq
      

Response

{
  "nodes": [
    {
      "id": "ee1ac4c4-775e-1983-ae98-a8eeb92b1aca",
      "name": "Top Level Item",
      "note": "This is a note",
      "parent_id": null,
      "priority": 100,
      "completed": false,
      "data": {
        "layoutMode": "bullets"
      },
      "createdAt": 1753120787,
      "modifiedAt": 1753120815,
      "completedAt": null
    },
    {
      "id": "ff2bd5d5-886f-2094-bf09-b9ffa93c2bdb",
      "name": "Child Item",
      "note": null,
      "parent_id": "ee1ac4c4-775e-1983-ae98-a8eeb92b1aca",
      "priority": 200,
      "completed": false,
      "data": {
        "layoutMode": "bullets"
      },
      "createdAt": 1753120820,
      "modifiedAt": 1753120830,
      "completedAt": null
    }
  ]
}
      

Targets

Targets provide quick access to specific nodes in your outline. They include both system targets (like "inbox") and custom shortcuts you create (like "home").

Learn more about shortcuts in the shortcuts documentation.

ENDPOINTS

GET/api/v1/targets

The Target object

Attributes

  • key string

    The unique identifier for this target (e.g., "home", "inbox", "today").

  • type string

    The type of target:

    • "shortcut" - User-defined shortcuts.
    • "system" - System-managed locations like inbox. Always returned, even if the target node hasn't been created yet.
  • name string | null

    The name of the node that this target points to. Returns null only for system targets when the target node hasn't been created yet.

User-defined shortcut

{
  "key": "home",
  "type": "shortcut",
  "name": "My Home Page"
}
      

System target (before node created)

{
  "key": "inbox",
  "type": "system",
  "name": null
}
      

List targets

Returns all available targets, including user-defined shortcuts (like "home") and system targets (like "inbox").

Parameters

No parameters required.

GET /api/v1/targets

curl https://workflowy.com/api/v1/targets \
  -H "Authorization: Bearer <YOUR_API_KEY>" | jq
      

Response

{
  "targets": [
    {
      "key": "home",
      "type": "shortcut",
      "name": "My Home Page"
    },
    {
      "key": "inbox",
      "type": "system",
      "name": "Inbox"
    }
  ]
}