Gathering API v0.1 ideas

Yeah, it’s unlikely we can provide that level of granularity at our current scale. The only thing we might be able to offer is a websocket based push system that’s granular to document being changed.

  • Create Note. Details: document, list, bullet, bullet note.
    Use case: option (via IFTTT etc) to dynamically create notes
  • Note Created. Details: document, list, bullet, bullet note, perhaps ID
    Use case: use as trigger (IFTTT etc) to make a “recipe” of IF note created (conditions) THEN other action
  • File Created
    Use case: trigger (IFTTT etc) to make a recipe of IF file uploaded THEN other action (e.g.: upload it to dropbox)
1 Like

Got it, I think that can do for now! :slight_smile: Thx!

This might not be the right place to ask this, but I’m also wondering, is there a place where I can get the entire text of a document right now? Just a string with new lines for each separate bullet point?

If so, that’d be super helpful so that I could create a script that processes that text and generates the corresponding trello view. Before the API comes out, I’ll just make it so edits only happen on Dynalist, and I’ll re-run the script every day or so.

@Shida is more qualified to answer this one :slight_smile:

I agree with David Lee’s post here

★ 1:★ get / post parent and child to batch process notes

I would like to a * GET and *POST / PATCH to for a specific ID and its child ID / nodes, for text

This way you can send a GET request to a parent ID, and then POST update anything in the child ID’s contents

I could specify which parent ID I would want to work with, so I update information at whatever location is relevant

So this would let me parse the data easier. For instance, the !date parameters are not tag clickable. Ideally I want to timestamp the week number next to it automatically, e.g. #W16A for week16. I usually don’t phrase express this and do it after the fact, to make it easier to search overall

Going back to this GET POST request thing again. This would also let me parse my imgur URL links, so I can natively tag my image links right inside dynalist. Basically, I’ll have a bunch of text + an imgur link. I can assign metadata to my images, so I can download all my image links, and automatically assign metatags. This way, I can search my adobe-bridge locally for all my images via text tags as well. Would be super awesome for me to manage my 7000+ image / gif library with imgur+sharex

Adding on, to this GET POST request thing. Now I can rearrange so on my bulletpoints, all my imgur link appear first, then any tags associated with it + words associated with it. This would make my notes significantly easier to read. This could also applied to files uploaded with dynalist Maybe you might want to parse all your data so the uploaded file link appears at the beginning or the end of bulletpoint

BASICALLY API enable GET / POST request for parent-child relationships nodes, to modify data, parse it in any format, reformat information afterwardsd so its easier to search and look at, etc



★1.1★ : Parsing data expanded into spreadsheets (Replaces python scripting)

Because in the trello project roadmap, you are going to implement ?some form of markdown table support?
so we can have tables down the road on specific lists

Sometimes I want to take notes on different vendors and clients. I currently do not use dynalist for this at all, because of lack of table support. I need to add the ✪ vendor name → ✪ discount structure ✪ freight notes ✪ PO contact ✪ Quote request email, etc

This is kind of hard to explain, but the API should enable me to do the following:

  • (pre - markdown table support) I’ll have some parent / child nodes outlined - I should be able to create a spreadsheet of data from this. The parent node is the first column, and child nodes in a specific order are each value in subsequent columns.

  • (pre-markdown table support) Or a specific formatting convention I use on my bulletpoints, to delimit cells like comma seperated values CSV. I usually use ✪ Bulletpoint 1, ✪ Bulletpoint 2, ✪ bulletpoint 3. I want a table with this data

  • (Post-markdown table support) - this feature would make this API portion redundant I think, but would help make longer text tables possible

BASICALLY - this part is hard to explain since I don’t know how to phrase it correctly, but by parsing data, I could create spreadsheets of data with it (rows, columns ,etc) based on parent-child relationship nodes, and the order of how child notes appear, or specific keywords in the child node.

BASICALLY 2.0 see diagram explaining it

ALTERNATIVELY I could also create gantt charts as well, there basically just spreadsheets too. Or integrate with trello based on keywords, etc etc



★2★ dashboard javascript / chrome plugin / workflowy rawbytes methods / specific view modes / data analysis

I would use this for a lot of already-made workflows by rawbytes plugins from workflowy. Resource here:

https://rawbytz.wordpress.com/

  • calculate how many tags this appears on a dashboard extension
  • how many times I used “ABC” word
  • how long my texts are on average
  • How much I wrote per day
  • How many image links I made throughout day
  • Mind map relationship mapping between parent / child nodes
  • Where is my deepest child node at?
  • How much time did I spent in that specific view mode ?(so I can analyze what improves to make)
  • How much time did I spent on dynalist, based on node creation dates / node updated dates? (To calculate pomodoros)
  • automatically calculate pomodoros based on node creation / updated dates


★3★ Automation via IFTTT using special command phrases

Everything here is basically just doing the following:

Not all tags are rated equally in my mind. Some tags are more important than others, and I want them to have some powerful features associated with some

This is already done with the “!” operator into google chrome

But, I might want some that implements special javascript functions like “ScrollTop”, etc so I can click instead of pressing “CTRL+F” to find keywords in a specific list view

It all goes back to this feature requests I made:, about implementing special scrolling $tags

So what things would I use with special keywords / tags?

  1. Javascript scroll navigation functions (e.g. Scrolltop) when clicked on
  2. H1, H2, H3 tags can appear on a right-pane similar to app.classeur.io
  3. @to-do tags can appear on a dashboard to the right, and set to expire (or delete itself) at certain time frames
  4. A @FollowUpThen system email system (https://www.followupthen.com/) can be implementing, for managing someday type tasks based on keywords (e.g. @Future-me). Basically, instead of an email, you would get a javascript popup dialog box showing all your @to-do tasks. If the task is done, you checkmark the @to-do panel . this lets you have a retroactively global KANBAN to-do list anywhere you want, all in a flatflowy style appearance, using a tabsnooze (chrome plugin) / followupthen style deadman’s switch do this task or we’ll keep bugging you until its done

Adding onto this idea num4 that I just made up

You can specifiy certain popup windows to appear at certain specified times using the API

The dashboard program would behave systematically like this:

  1. Every hour, search all @todo tasks and @someday tasks regardless of where note is at
  2. Once/day or whatever time set, popup a javascript dialog box with a checkbox of all items
  3. For someday tasks, make it appear once a week with a checkbox of all the items
  4. If an item is checkedoff, have the @todo tag at that task bulletpoint deleted (just the tag) (or CTRL+ENTER) the information

Diagram flow of this:

Then there’s the obvious use cases that other users had mentioned, IFTTT this and that etc

My main use case would be exporting certain items and displaying them in a custom format. I’d like to select items based on criteria, such as:

  • which document they are in
  • due date
  • parent
  • tag
  • text in the item or its notes
  • whether the item is checked

Anything which makes it easier to filter or parse items would help, but I also think it might be best to just keep it simple and allow the API to grab all the items in an efficient way (without requiring multiple API calls). The program that calls the API can then read the attributes and do any filtering.

I need addition to this, a simple polling or notification mechanism to easily identify changes would help. For example, I might want a program to trigger on a certain event, such as the completion of an item. I don’t want to grab all the data and work out what changed – ideally the API can make it easy to check for and see changes.

Hi, that is great news, really looking forward to this.

Dynalist is very flexible and can be the hub that feeds different representations of the same data: Calendar (2-way sync pending :slight_smile: ), kanban board (e.g. Trello).

To allow us enthousiasts to create an ecosystem of addons, you need to expose a generic API.

e.g. I would enjoy developing a process that does bulk rescheduling of tasks with dates, using durations and priorities (colors and nesting). I could use a notation that means duration for its users (e.g. dur:[30m]) even if it is plain text for dynalist.
Or time-tracking/pomodoro apps can integrate to grad a “today’s tasks fed from a search”.

My suggestions on the actual API:

  • Represent documents and search results as nested json of items. Todoist API represents tasks a flat array of items with indentation as number, please don’t go that way it is so awkward!

  • Define convention of the default place in the text to add date and tags, so that APIs can directly add/edit tags and date. This way you own the convention and its UX implications rather than having every API dev do its own thing.

  • Expose the GUID of each item to allow for effortless update/deletes of items. You own the identity tracking, not the API dev. The main limitation for tools like IFTTT etc is that they don’t have a 2-way communication with the app. As a user/contributor, a good reason for developing on an API is thir richer interaction, so I would promote this kind of thing.

  • Maybe expose metadata of the item: List of tags, list of dates, links etc instead of having to parse them from the raw markdown.

In the broader spirit of 3rd party development, Trello has many addons, both inside the app (and now you pay to use them :wink: ) and as 3rd party Chrome addons. You may want to start thinking/catering for UI mods sometime in the future.

Just out of curiosity, what is your tech-stack on the back end?

1 Like

So a couple of things I can see as things to consider…

  • Shared documents vs My private ones.
    • If a document has sharing for read or editing, then the API shouldn’t require OAuth for those types of requests
    • However it is not a shared document at all it should have a different type of authorization to access any API for them as I think it should be important for users to understand if they’re logging in and sharing OAuth access that means the app/program can access ANY of their data not just shared documents they might have access to.
    • Would having a new type of sharing permissions, to indicate API only be worth while to end-users?
  • API throttling? Is there a limit you’ll want to have to number of requests that can be made. For instance at the moment I understand you send a number of save requests while someone is typing for example to keep the save as current as possible. Will you want to open that many requests up to APIs or throttle it back to a certain number per hour/day?

I thought of another simple part of the data structure that would be great to have: for each node, besides just getting the “text”, can we also get the “public_url” which displays that text as root?

The purpose is so that if I were to create a Trello board representation of a document I have, I could add links on the Trello cards that would bring a viewer back to the corresponding Dynalist node.

Thanks!
David

Pure Java I believe, if you mean the server backend.

I don’t believe we plan to do throttling at the beginning, when there are only a handful of alpha API testers. But eventually it would be useful. Of course, the rate limiting should be something reasonable for personal use.

We can provide the id of the item and you can translate that to the URL yourself.

I think that’s safer, as our domain name might change; it’s best if you translate yourself whenever possible.

That works! I didn’t realize that the string in the url was just the id. If it is, then that totally works! Would it currently be “https://dynalist.io/d/[id]”?

While we’re waiting for the API, is there any way to get a version of the backup files (*.opml files) that has the id’s? :slight_smile: Totally understand if there isn’t an easy way right now though.

Well I think there’s an easier way for a developer: all the item (“node” as referred in code) can be found at DYNALIST.app.get_current_app_document().document.node_collection in the JS console. You should be able to process that information into any form you like with some digging. I think most things are pretty straight-forward in that JS object.

ah perfect! that’s what I’m looking for. Thanks @Erica!

1 Like

Hi, owner of Todoport here. We’d love to add Dynalist support for both import and export, so are excited about the API.

Some of this has already been covered elsewhere, but my wishlist would be:

  • REST API with everything as JSON - please don’t use any proprietary protocols, transports, or serialisation.
  • Support API authorisation for the user with ALL the methods you support for the web login - e.g. if I connect with my Google account to Dynalist, I should be able to use a Google access token for that user when making API calls.
  • Use standard ISO 8601 formats for dates/times, and stick to UTC values for times.
  • As Zoltan said above, batch mode is great for performance. Over the web, API calls can easily take seconds to complete, so any way to minimise the number of calls is really useful.
  • any PUT/POST calls to create objects should return the id of the created object as the result of the call (again, as JSON). This makes creating children sooooo much easier.

Looking forward to seeing this!

Chris

1 Like

This is unrelated, but you can use this link for Apple Reminders.

I haven’t read through this, but creating documents and having them update based on certain criteria (e.g. every word that mentions “purple cow” or whatever) would make for good use of the API.

And maybe the ability to add additional file panes to Dynalist so that way we don’t have to use different programs?

This is the workflow I’d like to implement with Dynalist’s API. Basically a low maintenance, retroactively global TODO-list using javascript popup boxes

I would basically only use the ! parameter for dates that dynalist currently has. The problem I have with google calendar integration is the following:

  1. If I assign a date into google calendar with Dynalist PRO feature, its a one time deal. Once that date is set, its set. I cannot reassign it for a future date unless I go to google calendar. Plus, I have to use two different systems here

This problem would be solved with other built in “TO-DO” style systems found in other websites / softwares, that are integrated directly into that platform. For instance

Basically, the only thing I would use this API is for a TO-DO list that is more powerful than what dynalist currently has. I would want an inbox basically



Basically, this is what would happen

1. Pre-existing workflow integration

I use a phraseexpress macro “3d#” to paste a reminder in the future (3 days from today) using the “!” operator. Or 1w# for 1 week, 1m# for 1 month, etc. This would be anywhere in my document and be retroactively global. The task would just be whatever contents are on the bulletpoint itself

###2. API plugin use for TO-DO dialog box reminder (GET /PUT)

When that day comes, say 3 days later, a javascript popup box would show the reminder I set for myself. The dialog box would have the following options in terms of what I can do with that task

  • Mark as complete
  • Reassign the task, by manual date, OR +1days, +2days, +4days, +1 week, +1 month (If you wanted to reassign 5 days later, press +1day and +4day then OK)
  • Change the description of the task (in the event the task nature changes)
  • Add notes underneath the task (as child bulletpoints) or as a NOTE

The ability to add notes on the description would give it a more “Trello” feel. You can attach documents using dynalist PRO attacher or just an imgur link, etc

3 API plugin to modify data (POST)

When all is done press OK. This would retroactively change that task lists data, including but not limited to:

  • Last revised date
  • New “!” date changed to reflect the “reschedule task for another day”.
  • Any description changes + new notes on that task

This would make task management much more friendly and lower maintenance in nature (E.G. I don’t have to use another app like TODOIST, I don’t need to go to a “seperate list” to manage to do tasks, or remember anything really, the forced dialog box reminder when I log in everyday does that for me)

Naturally I log into dynalist.io everyday anyways, so this isn’t going to be a probelm

Afterthoughts on implementation

I would probably just run this all as a tampermonkey script to set the reminder sent back to myself, the moment I log into dynalist for the day. This would control the javascript dialog box reminder I have. I’m not entirely sure how this part would work though (dialog box on dynalist), I’d have to look into it more, I’m still fairly certain it would have to be with a tampermonkeyscript and an “alert box”. I don’t think a chrome extension would work for what I’m looking for exactly

I’m not sure if an external server would be needed to store any data or if its just constantly making GET / PUT calls for current date stamps either. Or if its just going to be a datadump log somewhere.

Items not finished or set as occuring will just constantly show up in my dialog box “inbox” everyday