Everdo Help / User Manual / Documentation

JSON Import/Export Format - Moved to JSON Data Format | Everdo Help

:warning: Backup you database before trying to import manually edited JSON. You could break the app by importing incomplete data, and you might not even know something is wrong until sync stops working or some weird bugs appear.

Getting Started

Make an export of your existing Everdo data to use it as an example while reading this document. This should help you understand the structure of the import objects and provide concrete examples.

Use UUID v4 for the id field

When creating new items via import, you have to generate a random universally unique id for each new item and tag. When there’s a collision, the import code silently overwrites the existing item. To avoid a collision, always use a random UUID (v4) generator when creating the import objects (unless you do want to update existing items).

List of fields using UUID data type

  • id
  • parent_id (reference to the project’s/notebook’s id)
  • contact_id (reference to the contact tag’s id)

UUID Formating

id, parent_id and other UUID fields need to be specified as an uppercase string without dashes, for example:

id: "709632E58EF74A55A18E9347F24ED948"

This is important. Other formats may cause issues.

Timestamps

All timestamps are integers, representing Unix time in seconds (Unix format). Millisecond timestamps will not work.

Root Object

The .json file you’ll import must contain a single object with two array properties - tags and items. Each array may contain zero or more elements.

{
  "items": [],
  "tags": []
}

Partial import works - you only need to specify the items you wish to add or update. Import does not delete missing items or tags.

Item Object Structure

These fields are required for all items:

  • id
  • type
  • list
  • title
  • created_on
  • is_focused
  • start_date or schedule for scheduled items.

Please note:

  • Some combinations of list and type are invalid. For example you can’t import an inbox project
  • Some list values require specifying additional fields. For example in a scheduled item you also need to specify a start date.

type

  • "a": action
  • "p": project
  • "n": note
  • "l": notebook

list - item state

  • "i": inbox (actions only)
  • "a": active/next (based on item type)
  • "m": someday
  • "s": scheduled (must also specify start_date or schedule field)
  • "w": waiting
  • "d": deleted
  • "r": archived (must also specify completed_on)

completed_on

Completion timestamp (see Timestamps for format description). Null/undefined for incomplete items. Not null for completed items.

created_on

Creation timestamp. Required.

is_focused

Values: 0 or 1.
Warning: True and False will not work.

energy

Energy estimate.
Values: null, 1, 2, 3

time

Time estimate.
Value: number of minutes

due_date

Optional due date.
The timestamp’s time must be set to 0 Hours, 0 Minutes, 0 Seconds.

start_date

For one-time scheduled items only.
The timestamp’s time must be set to 0 Hours, 0 Minutes, 0 Seconds.

schedule

For repeating items only. This is a complex object. Try exporting some pre-scheduled items to get an idea how it works.

recurrent_task_id

The “template” action that was used to create an instance of this specific repeating action.

contact_id

Optional contact tag to wait for. The value is tag id.

tags

An array of tag ids. Don’t pass whole objects here, only string IDs.

position_child, position_parent, position_focus, position_global

Item’s position in a specific list:

  • child: position in a list of all sub-items (project actions / notes)
  • parent: position in a list of all parent items (projects/notebooks)
  • focus: position in a global focus list
  • global: position in a the list of all items

Examples

Examples shown here only specify all the required properties (apart from “note”, which is not required)

Inbox Action:

{
  "id": "709632E58EF74A55A18E9347F24ED948" ,
  "type": "a"
  "title": "Example Inbox Action",
  "list": "i",
  "note": "optional description",
  "created_on": 1549619289,
  "is_focused" : 0
}

Active Project (empty)

{
  "id": "B4F96775965F4F73A611365056301220" ,
  "type": "p"
  "title": "Example Project",
  "list": "a",
  "note": "optional description",
  "created_on": 1549619289,
  "is_focused" : 0
}

Active Project (empty)

{
  "id": "709632E58EF74A55A18E9347F24ED948" ,
  "type": "p"
  "title": "Example Project",
  "list": "a",
  "note": "optional description",
  "created_on": 1549619289,
  "is_focused" : 0
}

Project action (active, focused)

{
  "id": "B4F96775965F4F73A611365056301220" ,
  "type": "a"
  "list": "a",
  "title": "Example Project Action",
  "created_on": 1549619289,
  "is_focused" : 1,
  "parent_id": "709632E58EF74A55A18E9347F24ED948"
}

Tag (label) without color

{
  "id": "709632E58EF74A55A18E9347F24ED948",
  "title": "Example Tag",
  "type": "l"
}

Ask Questions

This document only covers the very basics of Everdo JSON format. If something you need is not covered, please PM me on this forum with specific questions.

← Back to Contents