We’re not excited at all to announce a very basic, barely useful API! You can find the full reference here: API Reference | Workflowy.
We’re making it this small on purpose: we have no idea what you actually want to build with an API, and developing it any further without your input would just be guesswork.
So if you want Workflowy to have a decent API, go try to build whatever you wanted to build with this barebones version and then tell us exactly where it fails you!
This is awesome! Very simple, very powerful. True to the Workflowy way. Thank you for taking the time to do this!
Quick question: Is there a way to get the node ID from the UI?
It looks like the ID that appears in the URL is not the complete Node ID. If I want my integration get the children of a particular node, I’m not seeing a way to fetch the Parent Node ID i want without manually digging through the tree myself in Postman or something.
Apologies if I’ve missed how something is working here.
I love this, especially that it adds the nodes without my even having to refresh the page. Gears are turning about what I will use this for… now automated services that I have already set up can populate my TODO lists. And I can sync my little TODO.txt’s I keep in code repos to workflowy automatically.
Or I can write a snippet of code in my list and have a service that is monitoring it (somehow, don’t want to clobber the API) and can eval it and send it back which would be cool and is something I’ve been imagining for a long time. I could imagine setting this up by making a chrome extension that is just a button that when I click it, tells my service to poll the code node. (Having the service polling automatically every second or whatever would be more convenient but you probably don’t want us hitting the api that frequently?). Retrieving nodes by tag would also be useful here.
I have the same question as the other commenter about how to get the ID of existing nodes, but the work-around is to just create a node via the API which returns its ID, and then swap that one in for the node I want to work with.
Hi, how about a oath authorization flow for getting the api key set up with an app. I think that (and the published api - thanks!) was all that was preventing getting my currently functional alexa skill to add a node via voice to a publishable state.
Hi Workflowy, first of all thank you for not being excited at all, there is far too much of that sort of thing going about And thank you for your great work on the app, I love it.
Before I dive into the API, here is my use case, can you please let me know if this will be possible, or if there is a better way to do it anyway?
I have a template set up with everything I need to do every day and every morning I create a new instance from it using the button and rename that to today’s date.
I then search all my notes for any which are tagged with today’s date (which I have done by typing “9/6/25” and pressing tab) and copy/paste those into my item from 1. - actually I link to them by ctrl-alt-l and then paste.
Great! I am writing a search function in python and having a bit of trouble with my request body, though curl was fine.
I think my first requests to extend the API would be for search. My idea is to use #sys:(something) in the note field to add functionality that runs nightly, e.g. #sys:done-is-deleted (child nodes of this marked as done are deleted overnight) or #sys:rota (which gets all the done child items, marks them undone, but shuffles them to the bottom of the parent.) if I get the hang of this then I will look at moving bullets around on particular dates, etc. So a simple “get me all the nodes with in their note” would be super helpful here.
(1) the node to contain a way to know whether it has children (my recursive descent is very slow b/c it’s calling the API on every leaf node just in order to discover that it is a leaf)
(2) results to be returned in priority order (though it was only two more lines to do that client side in python)
(3) an API to return the whole tree below someplace. Again, save a ton of API round-trips
This is great. I used it to create an MCP server, but I can’t seem to access nodes that I have saved to my account that are created by others on my team. They return but as empty. I tried creating my own node and then mirroring the other node to it too, and that also didn’t work. Any insight as to how to get that to work? My team creates lots of workflowys, and I often save them to my home.
This is a very important addition. I made a small webapp based on it. But how do I access images? I can access the nodes and their text notes. Images are very important as I use it to save screenshots.
Also I suggest the API support using the short-form of the project_id, since that already has to be unique to avoid url collisions. And then that way, like I posted above, the user can use theirs
I also use the short-form within my app, which is displayed to the user sometimes and it’d be annoying to have to use the long one. Currently it doesn’t slow things down at all for me since I’m already pulling the entire tree in order to send an update, but if yall added support for updates without pulling the whole tree, it might make sense to use the longer form, which as I said would be kind of annoying.
I’m very excited about this, since the repeated increased security measures keep breaking the auth for the extremely hacky (but very extensive and used daily by many people) integration I’ve set up for intend.do: WorkFlowy ↔ Intend
However! In order to get this working, I’ll need the ability to get the entire tree, with children. Frankly if you’d be willing to expose the existing root endpoint, that returns the ch: […childnodes…] arrays included as a full tree, and with notes as no, name as nm, lastModified as lm, just like it is on your existing backend, then I could just plug it in without having to refactor my backend to use different keys. And honestly that might make sense because returning JSON with these longer keys is probably going to be somewhat bigger.
But yeah, my integration relies on getting the FULL tree, since it scans it all for things tagged to link to my app—so while I’m excited, I’m not even going to attempt to use this rudimentary API by recursively sending a new request for child nodes for each node. That’d be ridiculous for even a moderately-sized graph, never mind my 15MB one. (Also when I briefly tested GET /nodes/:id it seemed to only return the node itself, without any children!)
Also, why not already allow users to generate multiple API keys marked with different names, so you can give different ones to different apps and thus easily de-auth the apps. That’s not hard at all. (Compared to setting up full-on OAuth)
Anyway please please please more of this. There is so much possible via integrating with workflowy!