Need API to fully specify a task

The API is currently limited to just throwing a title and note into the inbox. I need the ability to fully create a next action task including setting all the fields and specifying the list it goes to.

My use case is that I have code that processes my email inbox looking for certain emails and makes tasks in my GTD system based on them. This code is automating the clarification step of GTD and I don’t want to manually have to re-clarify the tasks.

This is unfortunately a show stopper for me, so while I am very interested in Everdo and it looks very good, this missing feature means I have to pass for now on EverDo.

Do you need to specify literally all the attributes of an item via the API? A smaller subset might be more realistic to add in a short time.

Mostly things settable in the UI by the inline commands and I would be fine with using the inline commands to do them (although would be better to support JSON properties). The primary ones needed there are :n :f :t :e :d.

But also needed and not covered by the inline commands is the ability to set area and context

After reading your discussion on Areas vs. Area of Responsibility, need to be able to set general tags as I will use tags for Area of Responsibility

How viable is actually inserting records into the database directly?

Digging around further, you actually have the JSON format that you use on import. All I am asking for is an API where I can send items in that format. Your page on the API actually kind of suggests that it would work as it has an example JSON format with this line:

    "isFocused": true       // Optional; Default = false

However that line actually has no effect on the created item.

However for this to be effective there would need to be a way to retrieve the list of tags.

Not viable - you would need to restart the app to load any external changes to sqlite.

The import is intended for things like one-off migrations of data from other systems or moving data between Everdo instances in offline mode.
It does almost no validations and so it’s easy to break the database by writing logically inconsistent data.

The main difficulty with adding a full API is that it requires a validation layer to enforce consistency.

But for each of the fields don’t you have code to do validation and parsing already to support the inline commands. It would seem you could easily make use of that. It would be a little more work to handle tags, but it seems to me most of the work for other fields is already done.

And as I said I would be fine with an API that accepts a command that takes a string with inline commands so that should be easy.

So for example an input of the form:

{
    "title": "New Task Title :n :f :t 10m :e med :d +30",
    "note": "Example note",
    "tags": ["Home", "@Computer", "someOtherLabel"]
}

You already should have code that handles the inline commands. You would need to look up tags by name, which I assume is easy. Question would be what to do you do if the tag doesn’t exist and I would say you would create it.

Indeed, the code for applying inline commands in this way could be fully reused. Tagging should not be difficult to support either. I will add this to the next release and hopefully it’s as easy to implement as it seems.