my-package/
├── meta-data.json the manifest: which file holds which entity
├── resources/
│ ├── boards.json a JSON array of records
│ ├── cards-0001.json an entity can be split into any number of files
│ ├── cards-0002.json
│ └── users.json
└── files/
└── report.txt the bytes of an attachmentmeta-data.json is the manifest. It lists every JSON file of the package together with the entity the file holds.files/ holds the bytes of attachments. The folder may be absent when the package has no files. Files in it that no record names are not imported.cards or card_members. It is the name used in the manifest, in the resource property of every entry of resource_files, and in the references between records.meta-data.json names the format and lists the files of the package. It is encoded as UTF-8, and all properties are required.| Field | Type | Required | Description |
|---|---|---|---|
profile | object | Yes | Profile of the package. |
profile.name | string | Yes | Always external. Constraints: always "external". |
package_id | UUID | Yes | Immutable identifier of the export snapshot; a new snapshot gets a new UUID. |
source | object | Yes | Where the data comes from. It describes the origin, not the target company. |
source.system | string | Yes | jira, clickup, yougile, notion, custom or the name of the vendor. Constraints: 1–128 characters. |
source.namespace | string | Yes | Stable key space of the source. Constraints: 1–512 characters. |
source.exported_at | Timestamp | Yes | Time of the snapshot. |
timeline_mode | enum | Yes | current_state_only: no history, so the cards have no steps. explicit: activities and card_history are given, and the card_add of each card is its creation. Constraints: one of current_state_only, explicit. |
resource_files | object[] | Yes | JSON files of the package. A resource can have several files. The files are read in the order of this list and the records of a file in the order of its array; where the position of a record matters (cards in a column, columns on a board), that order decides. A JSON file outside files/ that is not listed here is an error; other files are ignored. Constraints: 1–100000 items. |
resource_files[].resource | enum | Yes | Name of the resource the file holds. Constraints: one of activities, attachments, boards, card_blockers, card_children, card_history, card_links, card_members, card_planned_relations, card_time_logs, card_types, cards, checklist_items, checklists, columns, comments, custom_directories, custom_directory_records, custom_properties, document_comments, documents, folders, iteration_cards, iterations, lanes, roles, space_boards, spaces, tags, tree_entity_roles, user_groups, users. |
resource_files[].path | string | Yes | Safe unique path of a JSON array file, relative to the package root. Constraints: at least 1 character. |
binary_files | object | Yes | Location of the files referenced by records. Files there that no record names are not imported. |
binary_files.base_path | string | Yes | Always files/. The directory may be absent. Constraints: always "files/". |
{
"profile": {
"name": "external"
},
"package_id": "b6cde3fd-5d39-4fbf-85b8-c57c09e42ff6",
"source": {
"system": "custom",
"namespace": "acme:tracker",
"exported_at": "2026-10-07T09:00:00Z"
},
"timeline_mode": "current_state_only",
"resource_files": [
{
"resource": "cards",
"path": "resources/cards-0001.json"
},
{
"resource": "cards",
"path": "resources/cards-0002.json"
}
],
"binary_files": {
"base_path": "files/"
}
}timeline_mode is one for the whole package:| Value | Meaning |
|---|---|
current_state_only | The package has no history. Activities and card_history are absent, so the cards have no steps. |
explicit | The package carries the history of the cards: the activities, and the snapshots of every state of a card except the current one. Every card has one card_add action at its created_at, which is its creation; the import adds no other. |
package_id identifies the snapshot you exported: a new export gets a new UUID. It does not make a second import update the first one.cards-0001.json and cards-0002.json. List every file in the manifest. You do not split data into pages, sort it or compute service values.external_id is a string of 1 to 512 characters. It is unique within its entity across all of its files, case matters, and the value is used as it is. A number is written as a string: "42". A repeated value is an error, not an update.external_id of a record of another entity. The entity is fixed by the field: card_ref refers to a card. The field table of every entity tells the target.space:, says nothing about its entity.{
"card_ref": "card:42"
}{
"parent_ref": {
"resource": "spaces",
"external_id": "space:delivery"
}
}| Type | Description |
|---|---|
DateValue | An object with precision and value. A day without a time: {"precision": "date", "value": "2026-03-01"} (YYYY-MM-DD). A moment: {"precision": "date_time", "value": "2026-03-01T14:00:00Z"} (with a time zone). A date stays a date: it is shown without a time and never turned into midnight. |
ExternalId | Identifier of a record inside the package: a string of 1 to 512 characters, unique within its resource, case sensitive, for example "k-mrr". Numeric identifiers are passed as strings, for example "42". The import also keeps the external_id of boards, cards, columns, custom properties, their options, lanes and spaces as the external id of the objects it creates. |
FilePayload | Fields of a stored file: file_path, name and size, with an optional mime_type and sha256, for example {"file_path": "kpi/report.pdf", "name": "report.pdf", "size": 48213}. The bytes are placed under files/ at file_path. Card, comment and custom property files may instead name a url, and then the file stays in the cloud. |
#RRGGBB | Color as #RRGGBB, for example #3366FF. It is replaced with the nearest color of the target palette. |
LocalDate | Calendar date without time in the form YYYY-MM-DD, for example 2026-10-07. |
PolymorphicRef | Reference to a record of one of several resources: an object with exactly resource and external_id, for example {"resource": "cards", "external_id": "k-mrr"}. The allowed resources are listed by the field. |
Ref<resource> | Reference to a record of another resource by its external_id, for example "board_ref": "b-kpi". The target resource is fixed by the field. |
RichText | An object with format and text, for example {"format": "markdown", "text": "**Done** in Q1"}. format is plain_text, markdown or html; formats can be mixed in one package. Inside the text, attachment://<external_id> shows an attachment, card://<external_id> links a card and document://<external_id> a document of the package; an unknown external_id is an error. |
Timestamp | Point in time in RFC 3339 with a time zone, for example 2026-10-07T09:00:00Z or 2026-10-07T12:00:00+03:00. Digits of a second after the milliseconds are dropped. |
{
"format": "markdown",
"text": "Write the **release notes**."
}[
{
"precision": "date",
"value": "2026-10-08"
},
{
"precision": "date_time",
"value": "2026-10-08T18:00:00Z"
}
]file_path, a path inside files/, and declares size and, optionally, sha256. Convertinator compares them with the bytes. A path is never a URL, an absolute path or a path outside the folder: segments such as .., backslashes and links are refused. A path also cannot start with emails/ or index/, cannot be exactly undefined, and cannot contain % followed by two hexadecimal digits or a ~ segment, because the target keeps or changes those names. Case matters. Several records can refer to the same bytes.attachment://<external_id>; an unknown identifier is an error. The text of a card (its description, its history and its comments) may show the files attached to the card, to its comments and to its property values. An external_id that contains a space, a quote, a parenthesis, a bracket, < or > must be written percent-encoded in the link. The file_path of a linked file cannot contain ", <, > or &. The data of a document shows the attachments owned by that document the same way, with attachment://<attachments external_id>.explicit, the package carries the actions of every card and, for a card above version 1, the snapshots of the versions 1 to N-1. The action of version V moves the card from snapshot V-1 to the state V; version 1 is a card_add action without a snapshot. It is the creation of the card; the import adds no other. Versions, times and places must agree with the neighbouring states. Nothing is guessed or repaired, and a conflict stops the import.current_state_only, activities and card history are absent, and a card has no version or version 1.| Limit | Value | Description |
|---|---|---|
| Length of external_id | 512 | An external_id is a string of 1 to this many characters. |
| Size of a record | 8 MiB | A record is at most this many bytes as UTF-8 JSON. A file can hold any number of records, so the size of a package is not limited by this value. |
| Nesting depth of a record | 16 | Objects and lists inside a record are nested at most this many levels, the record itself being the first level. |
| Number of files in resource_files | 100000 | The manifest lists at most this many JSON files. This is an operational limit, checked before and during processing. |
| Size of meta-data.json | 64 MiB | meta-data.json is at most this many bytes. This is an operational limit, checked before the manifest is read. |
{
"code": "reference_not_found",
"resource": "comments",
"file": "resources/comments.json",
"record_index": 12,
"external_id": "comment:12",
"field": "card_ref",
"message": "В пакете отсутствует карточка с external_id card:404"
}| Property | Description |
|---|---|
code | The error code, one of the codes listed below. |
resource | The entity the problem belongs to, as named in resource_files, or null. |
file | The path of the file with the problem, relative to the root of the package, or null. |
record_index | The number of the record in the file, counted from 1. Line numbers are not used because a record may span several lines. Null when the problem is not about a record. |
external_id | The external_id of the record, or null. |
field | The field with the problem; a dotted path for a field inside an object or a list, or null. |
message | A readable explanation in the language of Convertinator. |
| Code | Meaning |
|---|---|
attachment_checksum_mismatch | sha256 differs from the real checksum of the file. |
attachment_declarations_conflict | Records describe the same file with different size or checksum. |
attachment_missing | A record refers to a file that does not exist under files/. |
attachment_path_invalid | A file_path is unsafe (absolute, with .., a backslash, NUL or a link) or uses a name the target reserves or changes. |
attachment_size_mismatch | size differs from the real size of the file. |
cancelled | The compilation was cancelled. |
chain_too_long | A dependency chain is longer than 255 links. |
compile_busy | Another process is already compiling this package. |
cycle_detected | Records form a cycle. |
disk_full | The working disk ran out of space while compiling. |
disk_space_insufficient | The working disk has too little free space. |
external_id_duplicate | The same external_id is used twice in one resource. |
field_invalid | A field has a value of the wrong type or outside its limits. |
field_required | A required field is missing. |
field_unknown | A record has a field the resource does not define. |
file_listed_twice | The same path is listed more than once in resource_files. |
file_missing | A file listed in resource_files does not exist. |
file_not_listed | A JSON file outside files/ is not listed in resource_files. |
file_path_invalid | A path in resource_files is unsafe or malformed. |
history_invalid | The actions, snapshots, positions or times of a card contradict the history rules. |
json_duplicate_key | An object has the same key twice. |
json_invalid | The file is not valid JSON. |
json_not_array | The file is not a single JSON array (NDJSON is not accepted). |
json_not_utf8 | The file is not valid UTF-8. |
json_too_deep | A record is nested deeper than 16 levels. |
manifest_invalid | The manifest does not match its schema. |
manifest_too_large | The converted package description exceeds the limit of the target. |
number_out_of_range | A number cannot be represented exactly. |
package_mixed | The manifest carries signs of both a ready-made format and the external profile. |
package_not_recognized | The folder has no meta-data.json that identifies a package. |
profile_invalid | The profile section of the manifest is missing or malformed, or the manifest has no resource_files. |
record_not_object | An element of the array is not an object. |
record_too_large | A record is larger than 8 MiB. |
reference_not_found | A reference points to a record that is not in the package. |
reference_resource_invalid | A polymorphic reference names a resource the field does not allow. |
relation_invalid | Related records contradict each other, for example a column of another board. |
resource_unknown | resource_files names a resource that does not exist. |
row_too_large | A converted row does not fit a page of the target. |
source_changed | A source file changed while it was being processed. |
target_incompatible | The target server cannot take this kind of import. |
target_unsupported | The target does not accept a value that the package carries. |
timeline_mode_conflict | The records contradict timeline_mode of the manifest. |
value_not_unique | A value that must be unique repeats. |
workdir_unavailable | The working directory cannot be used. |
external, and these pages describe the format as it is now.