{
  "openapi": "3.1.1",
  "info": {
    "title": "Laneboard Trello Import API",
    "version": "1.0.0",
    "summary": "Turn a Trello board export (JSON) into a Laneboard board with lists, labels and checklists.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://laneboardtrelloimport.usefulweb.app"
    }
  ],
  "paths": {
    "/api/v1/calculate": {
      "post": {
        "operationId": "calculate",
        "summary": "Turn a Trello board export (JSON) into a Laneboard board with lists, labels and checklists.",
        "description": "Converts the JSON file Trello exports for a board into a Laneboard project file: lists, cards, labels, assignees, due dates, checklists, comments, link attachments, cover colours and the moves between lists. It shows what was mapped and what was left out.\n\nMethodology:\n- Lists and cards are sorted by Trello’s position numbers. Closed lists and cards become archived ones (or are skipped). Board, list and card names, descriptions (Markdown), labels, members, checklists and items keep their text.\n- Label colours map to Laneboard’s ten colours (“_light” and “_dark” shades to their base colour, black and colourless labels to grey); the board background colour maps to the nearest of eight backgrounds by hue.\n- Due dates are converted to UTC date and time; “due complete” becomes done. Attachments become links when their URL starts with http(s); files uploaded to Trello stay on Trello. A card cover colour becomes the cover colour.\n- Actions: comments (commentCard) become comments; createCard and updateCard with listBefore/listAfter rebuild each card’s history, which the statistics use for lead and cycle times. Without a createCard action the creation time is read from the card id (its first 8 hex digits are seconds since 1970).\n- Custom fields, power-ups, stickers, votes, start dates and image covers are not imported; the warnings count them.\n\nTrello is a trademark of Atlassian. Laneboard reads the export file you provide; it does not connect to Trello.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "laneboard_trello_import",
        "x-owner-app": "laneboard",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LaneboardTrelloImportInput"
              },
              "examples": {
                "example1": {
                  "summary": "Small website relaunch board",
                  "value": {
                    "trello": "{\"id\":\"6abe13000000000000000001\",\"name\":\"Website relaunch\",\"desc\":\"Small sample board in the shape of a Trello export.\",\"closed\":false,\"shortUrl\":\"https://trello.com/b/sample\",\"idOrganization\":null,\"prefs\":{\"background\":\"green\",\"backgroundColor\":\"#519839\"},\"labels\":[{\"id\":\"6abe142c0000000000000006\",\"name\":\"Bug\",\"color\":\"red\"},{\"id\":\"6abe142c0000000000000007\",\"name\":\"Feature\",\"color\":\"blue_dark\"},{\"id\":\"6abe142c0000000000000008\",\"name\":\"Docs\",\"color\":null}],\"members\":[{\"id\":\"6a9686000000000000000009\",\"fullName\":\"Ana Pereira\",\"username\":\"anap\"},{\"id\":\"6a968600000000000000000a\",\"fullName\":\"\",\"username\":\"raj_k\"}],\"lists\":[{\"id\":\"6abe13b40000000000000004\",\"name\":\"Done\",\"closed\":false,\"pos\":3072},{\"id\":\"6abe133c0000000000000002\",\"name\":\"Ideas\",\"closed\":false,\"pos\":1024},{\"id\":\"6abe13780000000000000003\",\"name\":\"Doing\",\"closed\":false,\"pos\":2048},{\"id\":\"6abe13f00000000000000005\",\"name\":\"Parking lot\",\"closed\":true,\"pos\":4096}],\"cards\":[{\"id\":\"6abf72900000000000000065\",\"name\":\"New logo on the home page\",\"desc\":\"\",\"idList\":\"6abe13b40000000000000004\",\"pos\":1024,\"closed\":false,\"due\":\"2026-10-10T15:00:00.000Z\",\"dueComplete\":true,\"idLabels\":[\"6abe142c0000000000000007\"],\"idMembers\":[\"6a9686000000000000000009\"],\"attachments\":[],\"cover\":{\"color\":\"green\",\"idAttachment\":null}},{\"id\":\"6ac0c4100000000000000066\",\"name\":\"Contact form sends twice\",\"desc\":\"Happens on **slow** connections.\\n\\n- [x] Reproduce\\n- [ ] Fix\",\"idList\":\"6abe13780000000000000003\",\"pos\":2048,\"closed\":false,\"due\":\"2026-10-20T09:30:00.000Z\",\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000006\"],\"idMembers\":[\"6a968600000000000000000a\"],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac215900000000000000067\",\"name\":\"Write the FAQ\",\"desc\":\"\",\"idList\":\"6abe13780000000000000003\",\"pos\":1024,\"closed\":false,\"due\":null,\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000008\"],\"idMembers\":[],\"attachments\":[{\"id\":\"6ac375200000000000000384\",\"name\":\"Draft\",\"url\":\"https://docs.example.org/faq-draft\",\"isUpload\":false},{\"id\":\"6ac375200000000000000385\",\"name\":\"screenshot.png\",\"url\":\"https://trello.com/1/cards/x/attachments/y/download/screenshot.png\",\"isUpload\":true},{\"id\":\"6ac375200000000000000386\",\"name\":\"bad\",\"url\":\"javascript:alert(1)\",\"isUpload\":false}],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac367100000000000000068\",\"name\":\"Dark mode\",\"desc\":\"\",\"idList\":\"6abe133c0000000000000002\",\"pos\":1024,\"closed\":false,\"due\":null,\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000007\",\"unknown-label\"],\"idMembers\":[],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac4b8900000000000000069\",\"name\":\"Old banner idea\",\"desc\":\"\",\"idList\":\"6abe13f00000000000000005\",\"pos\":1024,\"closed\":false,\"due\":null,\"dueComplete\":false,\"idLabels\":[],\"idMembers\":[],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac60a10000000000000006a\",\"name\":\"Cookie notice text\",\"desc\":\"\",\"idList\":\"6abe13b40000000000000004\",\"pos\":2048,\"closed\":true,\"due\":null,\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000008\"],\"idMembers\":[],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}}],\"checklists\":[{\"id\":\"6ac0d22000000000000002bc\",\"idCard\":\"6ac0c4100000000000000066\",\"name\":\"Fix plan\",\"pos\":1,\"checkItems\":[{\"id\":\"6ac0d22000000000000002bd\",\"name\":\"Disable button on submit\",\"state\":\"complete\",\"pos\":2},{\"id\":\"6ac0d22000000000000002be\",\"name\":\"Add a test\",\"state\":\"incomplete\",\"pos\":3}]}],\"customFields\":[{\"id\":\"6abe13000000000000000320\",\"name\":\"Effort\"}],\"actions\":[{\"id\":\"6ac8bb200000000000000258\",\"type\":\"commentCard\",\"date\":\"2026-10-09T10:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Raj K\"},\"data\":{\"text\":\"Looks great on mobile too.\",\"card\":{\"id\":\"6abf72900000000000000065\"}}},{\"id\":\"6ac777b000000000000001f4\",\"type\":\"updateCard\",\"date\":\"2026-10-08T11:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6abf72900000000000000065\"},\"listBefore\":{\"id\":\"6abe13780000000000000003\"},\"listAfter\":{\"id\":\"6abe13b40000000000000004\"}}},{\"id\":\"6ac231b000000000000001f4\",\"type\":\"updateCard\",\"date\":\"2026-10-04T11:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6abf72900000000000000065\"},\"listBefore\":{\"id\":\"6abe133c0000000000000002\"},\"listAfter\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6ac4e2c000000000000001f5\",\"type\":\"updateCard\",\"date\":\"2026-10-06T12:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac0c4100000000000000066\"},\"listBefore\":{\"id\":\"6abe133c0000000000000002\"},\"listAfter\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6acccbc000000000000001f9\",\"type\":\"updateCard\",\"date\":\"2026-10-12T12:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac60a10000000000000006a\"},\"listBefore\":{\"id\":\"6abe13780000000000000003\"},\"listAfter\":{\"id\":\"6abe13b40000000000000004\"}}},{\"id\":\"6ac8d74000000000000001f9\",\"type\":\"updateCard\",\"date\":\"2026-10-09T12:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac60a10000000000000006a\"},\"listBefore\":{\"id\":\"6abe133c0000000000000002\"},\"listAfter\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6abf72900000000000000190\",\"type\":\"createCard\",\"date\":\"2026-10-02T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6abf72900000000000000065\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}},{\"id\":\"6ac0c4100000000000000191\",\"type\":\"createCard\",\"date\":\"2026-10-03T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac0c4100000000000000066\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}},{\"id\":\"6ac215900000000000000192\",\"type\":\"createCard\",\"date\":\"2026-10-04T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac215900000000000000067\"},\"list\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6ac367100000000000000193\",\"type\":\"createCard\",\"date\":\"2026-10-05T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac367100000000000000068\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}},{\"id\":\"6ac60a100000000000000195\",\"type\":\"createCard\",\"date\":\"2026-10-07T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac60a10000000000000006a\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}}]}"
                  }
                },
                "example2": {
                  "summary": "Same board without archived items and comments",
                  "value": {
                    "trello": "{\"id\":\"6abe13000000000000000001\",\"name\":\"Website relaunch\",\"desc\":\"Small sample board in the shape of a Trello export.\",\"closed\":false,\"shortUrl\":\"https://trello.com/b/sample\",\"idOrganization\":null,\"prefs\":{\"background\":\"green\",\"backgroundColor\":\"#519839\"},\"labels\":[{\"id\":\"6abe142c0000000000000006\",\"name\":\"Bug\",\"color\":\"red\"},{\"id\":\"6abe142c0000000000000007\",\"name\":\"Feature\",\"color\":\"blue_dark\"},{\"id\":\"6abe142c0000000000000008\",\"name\":\"Docs\",\"color\":null}],\"members\":[{\"id\":\"6a9686000000000000000009\",\"fullName\":\"Ana Pereira\",\"username\":\"anap\"},{\"id\":\"6a968600000000000000000a\",\"fullName\":\"\",\"username\":\"raj_k\"}],\"lists\":[{\"id\":\"6abe13b40000000000000004\",\"name\":\"Done\",\"closed\":false,\"pos\":3072},{\"id\":\"6abe133c0000000000000002\",\"name\":\"Ideas\",\"closed\":false,\"pos\":1024},{\"id\":\"6abe13780000000000000003\",\"name\":\"Doing\",\"closed\":false,\"pos\":2048},{\"id\":\"6abe13f00000000000000005\",\"name\":\"Parking lot\",\"closed\":true,\"pos\":4096}],\"cards\":[{\"id\":\"6abf72900000000000000065\",\"name\":\"New logo on the home page\",\"desc\":\"\",\"idList\":\"6abe13b40000000000000004\",\"pos\":1024,\"closed\":false,\"due\":\"2026-10-10T15:00:00.000Z\",\"dueComplete\":true,\"idLabels\":[\"6abe142c0000000000000007\"],\"idMembers\":[\"6a9686000000000000000009\"],\"attachments\":[],\"cover\":{\"color\":\"green\",\"idAttachment\":null}},{\"id\":\"6ac0c4100000000000000066\",\"name\":\"Contact form sends twice\",\"desc\":\"Happens on **slow** connections.\\n\\n- [x] Reproduce\\n- [ ] Fix\",\"idList\":\"6abe13780000000000000003\",\"pos\":2048,\"closed\":false,\"due\":\"2026-10-20T09:30:00.000Z\",\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000006\"],\"idMembers\":[\"6a968600000000000000000a\"],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac215900000000000000067\",\"name\":\"Write the FAQ\",\"desc\":\"\",\"idList\":\"6abe13780000000000000003\",\"pos\":1024,\"closed\":false,\"due\":null,\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000008\"],\"idMembers\":[],\"attachments\":[{\"id\":\"6ac375200000000000000384\",\"name\":\"Draft\",\"url\":\"https://docs.example.org/faq-draft\",\"isUpload\":false},{\"id\":\"6ac375200000000000000385\",\"name\":\"screenshot.png\",\"url\":\"https://trello.com/1/cards/x/attachments/y/download/screenshot.png\",\"isUpload\":true},{\"id\":\"6ac375200000000000000386\",\"name\":\"bad\",\"url\":\"javascript:alert(1)\",\"isUpload\":false}],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac367100000000000000068\",\"name\":\"Dark mode\",\"desc\":\"\",\"idList\":\"6abe133c0000000000000002\",\"pos\":1024,\"closed\":false,\"due\":null,\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000007\",\"unknown-label\"],\"idMembers\":[],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac4b8900000000000000069\",\"name\":\"Old banner idea\",\"desc\":\"\",\"idList\":\"6abe13f00000000000000005\",\"pos\":1024,\"closed\":false,\"due\":null,\"dueComplete\":false,\"idLabels\":[],\"idMembers\":[],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}},{\"id\":\"6ac60a10000000000000006a\",\"name\":\"Cookie notice text\",\"desc\":\"\",\"idList\":\"6abe13b40000000000000004\",\"pos\":2048,\"closed\":true,\"due\":null,\"dueComplete\":false,\"idLabels\":[\"6abe142c0000000000000008\"],\"idMembers\":[],\"attachments\":[],\"cover\":{\"color\":null,\"idAttachment\":null}}],\"checklists\":[{\"id\":\"6ac0d22000000000000002bc\",\"idCard\":\"6ac0c4100000000000000066\",\"name\":\"Fix plan\",\"pos\":1,\"checkItems\":[{\"id\":\"6ac0d22000000000000002bd\",\"name\":\"Disable button on submit\",\"state\":\"complete\",\"pos\":2},{\"id\":\"6ac0d22000000000000002be\",\"name\":\"Add a test\",\"state\":\"incomplete\",\"pos\":3}]}],\"customFields\":[{\"id\":\"6abe13000000000000000320\",\"name\":\"Effort\"}],\"actions\":[{\"id\":\"6ac8bb200000000000000258\",\"type\":\"commentCard\",\"date\":\"2026-10-09T10:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Raj K\"},\"data\":{\"text\":\"Looks great on mobile too.\",\"card\":{\"id\":\"6abf72900000000000000065\"}}},{\"id\":\"6ac777b000000000000001f4\",\"type\":\"updateCard\",\"date\":\"2026-10-08T11:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6abf72900000000000000065\"},\"listBefore\":{\"id\":\"6abe13780000000000000003\"},\"listAfter\":{\"id\":\"6abe13b40000000000000004\"}}},{\"id\":\"6ac231b000000000000001f4\",\"type\":\"updateCard\",\"date\":\"2026-10-04T11:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6abf72900000000000000065\"},\"listBefore\":{\"id\":\"6abe133c0000000000000002\"},\"listAfter\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6ac4e2c000000000000001f5\",\"type\":\"updateCard\",\"date\":\"2026-10-06T12:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac0c4100000000000000066\"},\"listBefore\":{\"id\":\"6abe133c0000000000000002\"},\"listAfter\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6acccbc000000000000001f9\",\"type\":\"updateCard\",\"date\":\"2026-10-12T12:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac60a10000000000000006a\"},\"listBefore\":{\"id\":\"6abe13780000000000000003\"},\"listAfter\":{\"id\":\"6abe13b40000000000000004\"}}},{\"id\":\"6ac8d74000000000000001f9\",\"type\":\"updateCard\",\"date\":\"2026-10-09T12:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac60a10000000000000006a\"},\"listBefore\":{\"id\":\"6abe133c0000000000000002\"},\"listAfter\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6abf72900000000000000190\",\"type\":\"createCard\",\"date\":\"2026-10-02T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6abf72900000000000000065\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}},{\"id\":\"6ac0c4100000000000000191\",\"type\":\"createCard\",\"date\":\"2026-10-03T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac0c4100000000000000066\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}},{\"id\":\"6ac215900000000000000192\",\"type\":\"createCard\",\"date\":\"2026-10-04T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac215900000000000000067\"},\"list\":{\"id\":\"6abe13780000000000000003\"}}},{\"id\":\"6ac367100000000000000193\",\"type\":\"createCard\",\"date\":\"2026-10-05T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac367100000000000000068\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}},{\"id\":\"6ac60a100000000000000195\",\"type\":\"createCard\",\"date\":\"2026-10-07T09:00:00.000Z\",\"memberCreator\":{\"fullName\":\"Ana Pereira\"},\"data\":{\"card\":{\"id\":\"6ac60a10000000000000006a\"},\"list\":{\"id\":\"6abe133c0000000000000002\"}}}]}",
                    "includeArchived": false,
                    "includeComments": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LaneboardTrelloImportResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tool": {
      "get": {
        "operationId": "getToolDefinition",
        "summary": "Inputs, output schema and examples for this tool",
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "LaneboardTrelloImportInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "trello": {
            "title": "Trello export (JSON)",
            "description": "In Trello: board menu → Print, export and share → Export as JSON. Paste the file here or upload it below.",
            "type": "string",
            "maxLength": 3000000,
            "default": ""
          },
          "trelloFile": {
            "title": "Trello export file (optional)",
            "description": "Used instead of the pasted text when given. Upload as {filename, contentType?, contentBase64}. Max 9766 KiB. Accepts .json,application/json.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "includeArchived": {
            "title": "Keep archived lists and cards (as archived)",
            "type": "boolean",
            "default": true
          },
          "includeComments": {
            "title": "Keep comments",
            "type": "boolean",
            "default": true
          }
        },
        "required": []
      },
      "LaneboardTrelloImportResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object"
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}