{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["tabs","tab"]},"redocly_category":"Guides","type":"markdown"},"seo":{"title":"Set up bulk user import","description":"Everything about Mosaic Journeys, SDKs, and APIs","siteUrl":"https://developer.transmitsecurity.com"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"set-up-bulk-user-import","__idx":0},"children":["Set up bulk user import"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide describes how to import users into Mosaic from a JSON export of your existing user store. Bulk import is often combined with JIT migration. To choose a migration approach, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/platform/migrate_to_mosaic"},"children":["Migrate user store"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-it-works","__idx":1},"children":["How it works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In bulk imports, user records are exported from an existing IDP and uploaded to Mosaic as a JSON file. Mosaic validates the records against its schema and creates users in its identity store. Imported users appear in the Admin Portal like any other Mosaic user."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bulk import doesn't include roles, groups, or authenticators. After the import, assign roles and groups in Mosaic, and register Mosaic authenticators for imported users (for example, in a login journey)."]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"sequenceDiagram\n  participant You\n  participant Mosaic\n  participant Store as Object storage\n\n  You ->> Mosaic: Request upload URLs\n  Mosaic -->> You: Presigned URL and form fields\n  You ->> Store: Upload JSON file\n  You ->> Mosaic: Start import run\n  Mosaic ->> Store: Read file\n  Mosaic -->> Mosaic: Validate records and create users\n  You ->> Mosaic: Poll run progress\n  Mosaic -->> You: Totals and outcome file URLs\n","diagramHtml":"<svg id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 737px;\" viewBox=\"-50 -10 737 563\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><style>\n    #diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 foreignObject {\n      overflow: visible;\n    }\n  </style><g><rect x=\"487\" y=\"477\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Store\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"562\" y=\"509.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"562\" dy=\"0\">Object storage</tspan></text></g><g><rect x=\"287\" y=\"477\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"362\" y=\"509.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"362\" dy=\"0\">Mosaic</tspan></text></g><g><rect x=\"0\" y=\"477\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"You\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"509.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">You</tspan></text></g><g><line id=\"actor2\" x1=\"562\" y1=\"65\" x2=\"562\" y2=\"477\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Store\" data-et=\"life-line\" data-id=\"Store\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Store\"><rect x=\"487\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Store\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"562\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"562\" dy=\"0\">Object storage</tspan></text></g></g><g><line id=\"actor1\" x1=\"362\" y1=\"65\" x2=\"362\" y2=\"477\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Mosaic\" data-et=\"life-line\" data-id=\"Mosaic\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Mosaic\"><rect x=\"287\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"362\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"362\" dy=\"0\">Mosaic</tspan></text></g></g><g><line id=\"actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"477\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"You\" data-et=\"life-line\" data-id=\"You\"></line><g id=\"root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"You\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"You\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">You</tspan></text></g></g><style>#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .error-icon{fill:#552222;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .error-text{fill:#552222;stroke:#552222;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-thickness-normal{stroke-width:1px;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-thickness-thick{stroke-width:3.5px;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-pattern-solid{stroke-dasharray:0;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .marker{fill:#333333;stroke:#333333;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .marker.cross{stroke:#333333;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 p{margin:0;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .actor{stroke:#9370DB;fill:#ECECFF;stroke-width:1;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 rect.note[data-look=\"neo\"]{stroke:#aaaa33;fill:#fff5ad;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 text.actor&gt;tspan{fill:black;stroke:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .actor-line{stroke:#9370DB;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [id$=\"-arrowhead\"] path{fill:#333;stroke:#333;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .sequenceNumber{fill:white;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [id$=\"-sequencenumber\"]{fill:#333;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [id$=\"-crosshead\"] path{fill:#333;stroke:#333;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .messageText{fill:#333;stroke:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .labelBox{stroke:#9370DB;fill:#ECECFF;filter:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .labelText,#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .labelText&gt;tspan{fill:black;stroke:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .loopText,#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .loopText&gt;tspan{fill:black;stroke:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .sectionTitle,#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .sectionTitle&gt;tspan{fill:black;stroke:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#9370DB;fill:#9370DB;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .note{stroke:#aaaa33;fill:#fff5ad;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .noteText,#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .noteText&gt;tspan{fill:black;stroke:none;font-weight:normal;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .activation0{fill:#f4f4f4;stroke:#666;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .activation1{fill:#f4f4f4;stroke:#666;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .activation2{fill:#f4f4f4;stroke:#666;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .actorPopupMenu{position:absolute;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .actor-man circle,#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 line{fill:#ECECFF;stroke-width:2px;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 g rect.rect{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));stroke:#9370DB;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 .node .neo-node{stroke:#9370DB;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].node rect,#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].cluster rect,#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"217\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Request upload URLs</text><line x1=\"76\" y1=\"111\" x2=\"358\" y2=\"111\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"You\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"fill: none;\"></line><text x=\"220\" y=\"126\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Presigned URL and form fields</text><line x1=\"361\" y1=\"157\" x2=\"79\" y2=\"157\" class=\"messageLine1\" data-et=\"message\" data-id=\"i1\" data-from=\"Mosaic\" data-to=\"You\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"317\" y=\"172\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Upload JSON file</text><line x1=\"76\" y1=\"203\" x2=\"558\" y2=\"203\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"You\" data-to=\"Store\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"fill: none;\"></line><text x=\"217\" y=\"218\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Start import run</text><line x1=\"76\" y1=\"249\" x2=\"358\" y2=\"249\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"You\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"fill: none;\"></line><text x=\"461\" y=\"264\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Read file</text><line x1=\"363\" y1=\"293\" x2=\"558\" y2=\"293\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Mosaic\" data-to=\"Store\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"fill: none;\"></line><text x=\"363\" y=\"308\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Validate records and create users</text><path d=\"M 363,337 C 423,327 423,367 363,357\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"Mosaic\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></path><text x=\"217\" y=\"382\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Poll run progress</text><line x1=\"76\" y1=\"413\" x2=\"358\" y2=\"413\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"You\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"fill: none;\"></line><text x=\"220\" y=\"428\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Totals and outcome file URLs</text><line x1=\"361\" y1=\"457\" x2=\"79\" y2=\"457\" class=\"messageLine1\" data-et=\"message\" data-id=\"i7\" data-from=\"Mosaic\" data-to=\"You\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-c6a0b09c3d64e7c05d07b942c3c45130ecc7b7b8e66a27a97cd4db8f0abd7ac1-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>","diagramHtmlDark":"<svg id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" style=\"max-width: 737px;\" viewBox=\"-50 -10 737 563\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><style>\n    #diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f foreignObject {\n      overflow: visible;\n    }\n  </style><g><rect x=\"487\" y=\"477\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Store\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"562\" y=\"509.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"562\" dy=\"0\">Object storage</tspan></text></g><g><rect x=\"287\" y=\"477\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"362\" y=\"509.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"362\" dy=\"0\">Mosaic</tspan></text></g><g><rect x=\"0\" y=\"477\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"You\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"509.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">You</tspan></text></g><g><line id=\"actor2\" x1=\"562\" y1=\"65\" x2=\"562\" y2=\"477\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Store\" data-et=\"life-line\" data-id=\"Store\"></line><g id=\"root-2\" data-et=\"participant\" data-type=\"participant\" data-id=\"Store\"><rect x=\"487\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Store\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"562\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"562\" dy=\"0\">Object storage</tspan></text></g></g><g><line id=\"actor1\" x1=\"362\" y1=\"65\" x2=\"362\" y2=\"477\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"Mosaic\" data-et=\"life-line\" data-id=\"Mosaic\"></line><g id=\"root-1\" data-et=\"participant\" data-type=\"participant\" data-id=\"Mosaic\"><rect x=\"287\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"Mosaic\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"362\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"362\" dy=\"0\">Mosaic</tspan></text></g></g><g><line id=\"actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"477\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"You\" data-et=\"life-line\" data-id=\"You\"></line><g id=\"root-0\" data-et=\"participant\" data-type=\"participant\" data-id=\"You\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"You\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400; font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif;\"><tspan x=\"75\" dy=\"0\">You</tspan></text></g></g><style>#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .error-icon{fill:#a44141;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .error-text{fill:#ddd;stroke:#ddd;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-thickness-normal{stroke-width:1px;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-thickness-thick{stroke-width:3.5px;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-pattern-solid{stroke-dasharray:0;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-pattern-dashed{stroke-dasharray:3;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .edge-pattern-dotted{stroke-dasharray:2;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .marker{fill:lightgrey;stroke:lightgrey;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .marker.cross{stroke:lightgrey;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f svg{font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f p{margin:0;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .actor{stroke:#ccc;fill:#1f2020;stroke-width:1;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f rect.actor.outer-path[data-look=\"neo\"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f rect.note[data-look=\"neo\"]{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f text.actor&gt;tspan{fill:lightgrey;stroke:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .actor-line{stroke:#ccc;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .innerArc{stroke-width:1.5;stroke-dasharray:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:lightgrey;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:lightgrey;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [id$=\"-arrowhead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .sequenceNumber{fill:black;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [id$=\"-sequencenumber\"]{fill:lightgrey;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [id$=\"-crosshead\"] path{fill:lightgrey;stroke:lightgrey;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .messageText{fill:lightgrey;stroke:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .labelBox{stroke:#ccc;fill:#1f2020;filter:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .labelText,#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .labelText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .loopText,#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .loopText&gt;tspan{fill:lightgrey;stroke:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .sectionTitle,#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .sectionTitle&gt;tspan{fill:lightgrey;stroke:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#ccc;fill:#ccc;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .note{stroke:hsl(180, 0%, 18.3529411765%);fill:hsl(180, 1.5873015873%, 28.3529411765%);}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .noteText,#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .noteText&gt;tspan{fill:rgb(183.8476190475, 181.5523809523, 181.5523809523);stroke:none;font-weight:normal;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .activation0{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .activation1{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .activation2{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:#ccc;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .actorPopupMenu{position:absolute;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .actorPopupMenuPanel{position:absolute;fill:#1f2020;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .actor-man circle,#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f line{fill:#1f2020;stroke-width:2px;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:#ccc;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f .node .neo-node{stroke:#ccc;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].node rect,#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].cluster rect,#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].node polygon{stroke:url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].node path{stroke:url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-gradient);stroke-width:1px;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].node circle{stroke:url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f :root{--mermaid-font-family:\"Redocly Mermaid Sans\",Arial,\"Liberation Sans\",Arimo,Helvetica,\"Redocly Mermaid CJK\",sans-serif;}</style><g></g><defs><symbol id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-solidTopArrowHead\" refX=\"7.9\" refY=\"7.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 8 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-solidBottomArrowHead\" refX=\"7.9\" refY=\"0.75\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 0 L 0 8 z\"></path></marker></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-stickTopArrowHead\" refX=\"7.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 7 7\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><defs><marker id=\"diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-stickBottomArrowHead\" refX=\"7.5\" refY=\"0\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M 0 7 L 7 0\" stroke=\"black\" stroke-width=\"1.5\" fill=\"none\"></path></marker></defs><text x=\"217\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Request upload URLs</text><line x1=\"76\" y1=\"111\" x2=\"358\" y2=\"111\" class=\"messageLine0\" data-et=\"message\" data-id=\"i0\" data-from=\"You\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"fill: none;\"></line><text x=\"220\" y=\"126\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Presigned URL and form fields</text><line x1=\"361\" y1=\"157\" x2=\"79\" y2=\"157\" class=\"messageLine1\" data-et=\"message\" data-id=\"i1\" data-from=\"Mosaic\" data-to=\"You\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"317\" y=\"172\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Upload JSON file</text><line x1=\"76\" y1=\"203\" x2=\"558\" y2=\"203\" class=\"messageLine0\" data-et=\"message\" data-id=\"i2\" data-from=\"You\" data-to=\"Store\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"fill: none;\"></line><text x=\"217\" y=\"218\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Start import run</text><line x1=\"76\" y1=\"249\" x2=\"358\" y2=\"249\" class=\"messageLine0\" data-et=\"message\" data-id=\"i3\" data-from=\"You\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"fill: none;\"></line><text x=\"461\" y=\"264\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Read file</text><line x1=\"363\" y1=\"293\" x2=\"558\" y2=\"293\" class=\"messageLine0\" data-et=\"message\" data-id=\"i4\" data-from=\"Mosaic\" data-to=\"Store\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"fill: none;\"></line><text x=\"363\" y=\"308\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Validate records and create users</text><path d=\"M 363,337 C 423,327 423,367 363,357\" class=\"messageLine1\" data-et=\"message\" data-id=\"i5\" data-from=\"Mosaic\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></path><text x=\"217\" y=\"382\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Poll run progress</text><line x1=\"76\" y1=\"413\" x2=\"358\" y2=\"413\" class=\"messageLine0\" data-et=\"message\" data-id=\"i6\" data-from=\"You\" data-to=\"Mosaic\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"fill: none;\"></line><text x=\"220\" y=\"428\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-family: &quot;Redocly Mermaid Sans&quot;, Arial, &quot;Liberation Sans&quot;, Arimo, Helvetica, &quot;Redocly Mermaid CJK&quot;, sans-serif; font-size: 16px; font-weight: 400;\">Totals and outcome file URLs</text><line x1=\"361\" y1=\"457\" x2=\"79\" y2=\"457\" class=\"messageLine1\" data-et=\"message\" data-id=\"i7\" data-from=\"Mosaic\" data-to=\"You\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#diagram-a3df92e68db4ca456c968a86fe194e4305ca2c17b8eebf6bf58e951fb222e05f-arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg>"},"children":["sequenceDiagram\n  participant You\n  participant Mosaic\n  participant Store as Object storage\n\n  You ->> Mosaic: Request upload URLs\n  Mosaic -->> You: Presigned URL and form fields\n  You ->> Store: Upload JSON file\n  You ->> Mosaic: Start import run\n  Mosaic ->> Store: Read file\n  Mosaic -->> Mosaic: Validate records and create users\n  You ->> Mosaic: Poll run progress\n  Mosaic -->> You: Totals and outcome file URLs\n"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The import flow:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You request upload URLs from Mosaic (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/migration/users/files/upload-urls"]},"). See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#request-upload-urls"},"children":["Request upload URLs"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You upload each JSON file directly to object storage using its URL. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#upload-each-file"},"children":["Upload each file"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You start an import run (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/migration/users/runs"]},"). Mosaic reads the files, validates the records, and creates users. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#step-5-start-the-import"},"children":["Step 5: Start the import"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You poll the run (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v1/migration/users/runs/{run_id}"]},") for totals and outcome files listing failed records. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#step-6-track-progress-and-review-failures"},"children":["Step 6: Track progress and review failures"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Optionally, you cancel a running import (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/migration/users/runs/{run_id}/cancel"]},") so you can start a new run. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#step-7-cancel-a-run"},"children":["Step 7: Cancel a run"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"before-you-start","__idx":2},"children":["Before you start"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If this is your first time integrating with Mosaic, create an application in the Admin Portal as described ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/user/create_new_application"},"children":["here"]},". Imported users are assigned to the application you pass when you start the run."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-1-create-a-management-app","__idx":3},"children":["Step 1: Create a management app"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Bulk import APIs are tenant-level operations. Authorize every call with a client access token generated from a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["management app"]},", not from the application you assign imported users to."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["In the Admin Portal, go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Settings"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Management Apps"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["+ Add management app"]},", give it a name (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Bulk user import"]},"), and save."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Open the app and copy the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client ID"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client Secret"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/user/management_apps"},"children":["Leverage management apps"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Generate a client access token with those credentials:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  'https://api.transmitsecurity.io/cis/oidc/token' \\\n  -H 'Content-Type: application/x-www-form-urlencoded' \\\n  -d grant_type=client_credentials \\\n  -d client_id=MANAGEMENT_APP_CLIENT_ID \\\n  -d client_secret=MANAGEMENT_APP_CLIENT_SECRET\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-2-align-the-user-schema","__idx":4},"children":["Step 2: Align the user schema"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before you transform the export, make sure Mosaic can store the attributes you plan to import."]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["List the identifiers (such as email, phone number, or username) and other user attributes stored in your source user store. You'll map each of them to a Mosaic user field."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Review the default ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/user/how_users_work"},"children":["Mosaic user schema"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the source uses attributes that Mosaic does not provide out of the box, ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/user/manage_user_schema"},"children":["add custom user fields"]}," (",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Admin Portal"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B2C Identity"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Users"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Edit Schema"]},")."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Custom fields must exist in the tenant schema before you upload the file. Records that hold an undefined custom field fail validation and aren't created."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-3-prepare-the-json-file","__idx":5},"children":["Step 3: Prepare the JSON file"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Export the source user store from your existing IDP, then transform it into a JSON ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["array of user objects"]},". Field order within each object does not matter. Field names and types must match Mosaic."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each record follows the same structure as the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/openapi/user/user.openapi/other/createuser#other/createuser/request/body"},"children":["Create user"]}," request body, with these constraints:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Include ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["at least one identifier"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["phone_number"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]},", or a custom identifier you defined in the schema). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]}," can be included, but it does not count as an identifier. Records with only ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]}," fail validation and aren't created."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Identifiers must be ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["unique"]}," across all records in the file and across existing Mosaic users (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]}," is unique per application)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Unknown fields are rejected."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Do not include plaintext passwords in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["credentials"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Do not include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["delegated_access"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Put custom attributes in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["custom_user_fields"]}," (subject to availability in your tenant). Those keys must already exist in the tenant schema (see Step 2)."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each record can also include these fields supported only for bulk import:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional Mosaic user ID to assign. If omitted, Mosaic generates one. A duplicate ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_id"]}," fails at creation. Ability to provide ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_id"]}," is subject to availability in your tenant."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email_verified"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Whether the primary email is already verified."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email_verified_at"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When the email was verified (ISO 8601)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["phone_verified"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Whether the primary phone number is already verified."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["phone_verified_at"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When the phone number was verified (ISO 8601)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User status: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Active"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Disabled"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Pending"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["last_auth"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Timestamp of the user's last authentication in the source system (ISO 8601)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hashed_password"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Pre-hashed password to store as-is. Mosaic verifies it at login using the given algorithm. Do not send a plaintext password."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hashed_password_history"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Array of previous password hashes in the same shape as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hashed_password"]},". Up to 20 entries. Requires ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hashed_password"]}," to be set."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hashed_password"]}," (and each item in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hashed_password_history"]},") uses this object:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hash"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The password hash string."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["algorithm"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Algorithm used to produce the hash. Supported values: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["argon2"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["bcrypt"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sha"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sha1"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sha2"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sha256"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sha512"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ssha"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ssha256"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ssha512"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["md5"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["smd5"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["firebaseScrypt"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["drupalPhpass"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["salt"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Salt used when hashing, if the algorithm requires it."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["force_replace"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},", the password is temporary and the user must replace it after a successful login."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["File names must match ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["^[a-zA-Z0-9][a-zA-Z0-9._-]*\\.json$"]}," (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["users_eu_1.json"]},") and cannot exceed 255 characters. A file cannot exceed 2 GB. A tenant can store up to 1000 files. Split a large export across multiple files if needed."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example file (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["users_batch_1.json"]},"):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"[\n  {\n    \"user_id\": \"3cu0eCGdFIkAXLpcNQnPa\",\n    \"external_user_id\": \"ext-2000097700\",\n    \"external_account_id\": \"tPgBrCercegT\",\n    \"email\": \"max.planck.2000097700@example.com\",\n    \"email_verified\": true,\n    \"email_verified_at\": \"2025-05-25T05:57:42.813Z\",\n    \"phone_number\": \"+14153074425\",\n    \"phone_verified\": true,\n    \"phone_verified_at\": \"2025-12-28T22:50:33.147Z\",\n    \"username\": \"mplanck_2000097700\",\n    \"name\": {\n      \"title\": \"Ms.\",\n      \"first_name\": \"Max\",\n      \"middle_name\": \"Woodrow\",\n      \"last_name\": \"Planck\"\n    },\n    \"birthday\": \"1858-09-14\",\n    \"address\": {\n      \"country\": \"DE\",\n      \"state\": \"California\",\n      \"city\": \"New Randalfurt\",\n      \"street_address\": \"5354 America Passage\",\n      \"postal_code\": \"52372\",\n      \"type\": \"Other\"\n    },\n    \"picture\": \"https://avatars.githubusercontent.com/u/79465009\",\n    \"language\": \"de\",\n    \"status\": \"Disabled\",\n    \"last_auth\": \"2026-06-16T03:24:01.209Z\",\n    \"hashed_password\": {\n      \"hash\": \"$2b$10$sJZrc4geZiludsEJ3nxzg3eRSnTYPWeb66Ee1ZSkLxoxr6DBrTBm8\",\n      \"algorithm\": \"bcrypt\",\n      \"force_replace\": false\n    },\n    \"custom_app_data\": {\n      \"source\": \"poc\",\n      \"batch\": 0,\n      \"discipline\": \"science\"\n    },\n    \"hashed_password_history\": [],\n    \"custom_user_fields\": {\n      \"discipline\": \"science\",\n      \"birth_year\": 1858,\n      \"notable_work\": \"The quantum of action\",\n      \"is_nobel_laureate\": true,\n      \"scholar_id\": \"SCH-00X2T19G\",\n      \"first_publication\": \"1883-09-17T00:00:00.000Z\",\n      \"research_areas\": [\n        \"astrophysics\"\n      ],\n      \"milestones\": [\n        \"1899-04-11T01:11:07.890Z\"\n      ],\n      \"contact_email\": \"max.planck.2000097700@lab.example.com\",\n      \"lab_phone\": \"+12125557286\",\n      \"bio\": {\n        \"discipline\": \"science\",\n        \"born\": 1858,\n        \"known_for\": \"The quantum of action\",\n        \"verified\": false\n      }\n    }\n  }\n]\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-4-upload-the-files","__idx":6},"children":["Step 4: Upload the files"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Files are uploaded directly to object storage, not through the Mosaic API host. The upload takes two calls per batch of files:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Request an upload URL for each file name from Mosaic."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Upload each file to its URL, using the form fields Mosaic returned."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If a URL expires (after 15 minutes) or an upload is interrupted, request a new URL for the same file name and upload again."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"request-upload-urls","__idx":7},"children":["Request upload URLs"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/migration/users/files/upload-urls"]}," with the file names you will upload. You can request up to 100 names in one call. Mosaic returns an upload URL, valid for 15 minutes, and form fields for each name. Re-requesting a name you already uploaded returns a URL that overwrites the same object."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  'https://api.transmitsecurity.io/cis/v1/migration/users/files/upload-urls' \\\n  -H 'Authorization: Bearer MANAGEMENT_APP_ACCESS_TOKEN' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"files\": [\"users_batch_1.json\"]\n  }'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example response:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"result\": {\n    \"files\": [\n      {\n        \"name\": \"users_batch_1.json\",\n        \"url\": \"https://storage.example/upload\",\n        \"fields\": {\n          \"key\": \"user-migration/TENANT_ID/files/users_batch_1.json\",\n          \"policy\": \"...\"\n        },\n        \"expires_at\": \"2026-09-15T12:00:00.000Z\"\n      }\n    ]\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"upload-each-file","__idx":8},"children":["Upload each file"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Upload each file with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["multipart/form-data"]}," POST to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]}," returned for that file name. Include every entry in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fields"]}," as a form field, then attach the file as the last field."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  'UPLOAD_URL' \\\n  -F 'key=OBJECT_KEY' \\\n  -F 'policy=POLICY' \\\n  -F 'file=@/path/to/users_batch_1.json'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["url"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fields"]}," values Mosaic returned. Add any additional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fields"]}," entries the response includes."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-5-start-the-import","__idx":9},"children":["Step 5: Start the import"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once the files have been uploaded to storage, you can run the import in one of two modes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Dry run"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dry_run"]},"): validates every record against the schema without creating users. Use it to find and fix validation errors before the real import. A dry run always reports ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["created"]}," as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Live"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["live"]},"): validates every record and creates the users that pass validation."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To start a run:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  'https://api.transmitsecurity.io/cis/v1/migration/users/runs' \\\n  -H 'Authorization: Bearer MANAGEMENT_APP_ACCESS_TOKEN' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"mode\": \"live\",\n    \"app_id\": \"APP_ID\",\n    \"files\": [\"users_batch_1.json\"]\n  }'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mode"]},": ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dry_run"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["live"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["app_id"]},": the application the imported users will be assigned to."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["files"]},": the uploaded file names to process. If you omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["files"]},", the run processes every file currently uploaded for the tenant."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response includes a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["run_id"]},". A tenant can have only one active run at a time. Starting another run while one is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["running"]}," returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409"]},". To start a different run, ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#step-7-cancel-a-run"},"children":["cancel"]}," the active one first. Mosaic also rejects the run if a listed file is missing from storage or if ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["app_id"]}," does not exist."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Created users appear in ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Admin Portal"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B2C Identity"]}," > ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Users"]}," and through the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/openapi/user/user.openapi/other/getusers"},"children":["Users APIs"]},". Existing users are not updated."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-6-track-progress-and-review-failures","__idx":10},"children":["Step 6: Track progress and review failures"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Poll ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /v1/migration/users/runs/{run_id}"]}," until the run is no longer ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["running"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X GET \\\n  'https://api.transmitsecurity.io/cis/v1/migration/users/runs/RUN_ID' \\\n  -H 'Authorization: Bearer MANAGEMENT_APP_ACCESS_TOKEN'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example response:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"result\": {\n    \"run_id\": \"RUN_ID\",\n    \"status\": \"completed\",\n    \"mode\": \"live\",\n    \"total_files\": 1,\n    \"processed\": 2,\n    \"created\": 1,\n    \"failed\": 1,\n    \"started_at\": \"2026-09-22T12:00:00.000Z\",\n    \"completed_at\": \"2026-09-22T12:05:00.000Z\",\n    \"files\": [\n      {\n        \"name\": \"users_batch_1.json\",\n        \"status\": \"completed\",\n        \"processed\": 2,\n        \"created\": 1,\n        \"failed\": 1,\n        \"outcome_url\": \"https://storage.example/outcomes/users_batch_1.json\"\n      }\n    ]\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," for the run is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["running"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["completed"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cancelled"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["completed_at"]}," is present only after the run ends."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["processed"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["created"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]}," are totals across every file. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]}," covers records that did not match the schema (for example, a missing identifier, an invalid field, or a custom field that is not defined for the tenant) and records Mosaic could not create (for example, a duplicated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]},", or other unique identifier)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["files"]}," reports the same counters per uploaded file. Each file status is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["running"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["completed"]},", or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["failed"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["outcome_url"]}," is a download link valid for 24 hours. It appears after that file has completed. Use it to inspect each failed record and the reason."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Fix the failed records, upload a new file (or overwrite the same name), and start another run for the remaining users."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"step-7-cancel-a-run","__idx":11},"children":["Step 7: Cancel a run"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To stop a run that is still ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["running"]},", call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v1/migration/users/runs/{run_id}/cancel"]},". Mosaic sets the run status to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cancelled"]}," and does not process remaining work. Work already in progress finishes, and each file still gets a report. Users that were already created stay in the identity store."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After the run is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cancelled"]},", you can start a new run."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  'https://api.transmitsecurity.io/cis/v1/migration/users/runs/RUN_ID/cancel' \\\n  -H 'Authorization: Bearer MANAGEMENT_APP_ACCESS_TOKEN'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"upload-file-management","__idx":12},"children":["Upload file management"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Uploaded files are stored by Transmit for one month and then deleted automatically. Until then, you can reuse an uploaded file in later runs. As a best practice, delete files you no longer need."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["List files:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X GET \\\n  'https://api.transmitsecurity.io/cis/v1/migration/users/files' \\\n  -H 'Authorization: Bearer MANAGEMENT_APP_ACCESS_TOKEN'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Delete one file:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X DELETE \\\n  'https://api.transmitsecurity.io/cis/v1/migration/users/files/users_batch_1.json' \\\n  -H 'Authorization: Bearer MANAGEMENT_APP_ACCESS_TOKEN'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Delete all uploaded files:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"shell","header":{"controls":{"copy":{}}},"source":"curl -i -X DELETE \\\n  'https://api.transmitsecurity.io/cis/v1/migration/users/files' \\\n  -H 'Authorization: Bearer MANAGEMENT_APP_ACCESS_TOKEN'\n","lang":"shell"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You cannot delete files while a migration run is in progress."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"sample-migration-script","__idx":13},"children":["Sample migration script"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Developed by Transmit Security engineers, this sample script processes up to 1 million user records in about 10 minutes after the files are uploaded. Upload time depends on your network connection and is not included in that 10 minutes. To use the script:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Set values for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APP_ID"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BASE_URL"]}," at the top of the script. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["APP_ID"]}," is the application imported users will be assigned to, not the management app."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Run the script with the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["management app"]}," client credentials and paths to the files: ",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CLIENT_ID=... CLIENT_SECRET=... node bulk-migrate-users.mjs ./users-1.json ./users-2.json"]}]}]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"bulk-migrate-users.mjs","disable":false},"children":[{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"js","header":{"controls":{"copy":{}}},"source":"import { existsSync, openAsBlob } from 'node:fs';\nimport { writeFile } from 'node:fs/promises';\nimport { basename } from 'node:path';\nimport { setTimeout as sleep } from 'node:timers/promises';\n\nconst BASE_URL = 'https://api.transmitsecurity.io/cis'; // Update according to your environment\nconst APP_ID = 'YOUR_APP_ID'; // Replace with your app ID\nconst MODE = 'dry_run'; // Change to 'live' to create the users. 'dry_run' only validates the files\nconst FILE_PATHS = process.argv.slice(2);\n\nlet accessToken;\nlet accessTokenExpiresAt = 0;\n\nasync function getAccessToken() {\n  if (Date.now() < accessTokenExpiresAt) {\n    return accessToken;\n  }\n  const response = await fetch(`${BASE_URL}/oidc/token`, {\n    method: 'POST',\n    body: new URLSearchParams({\n      grant_type: 'client_credentials',\n      client_id: process.env.CLIENT_ID,\n      client_secret: process.env.CLIENT_SECRET,\n    }),\n  });\n  const token = await response.json();\n  accessToken = token.access_token;\n  accessTokenExpiresAt = Date.now() + (token.expires_in - 60) * 1000;\n  return accessToken;\n}\n\nasync function callApi(method, path, body) {\n  const token = await getAccessToken();\n  const response = await fetch(`${BASE_URL}${path}`, {\n    method,\n    headers: {\n      Authorization: `Bearer ${token}`,\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify(body),\n  });\n  const responseText = await response.text();\n  if (!response.ok) {\n    throw new Error(`${method} ${path} failed with ${response.status}: ${responseText}`);\n  }\n  return JSON.parse(responseText).result;\n}\n\n// 1. Upload each file with its own presigned form\nasync function uploadFiles(filePaths) {\n  const missingFiles = filePaths.filter((filePath) => !existsSync(filePath));\n  if (filePaths.length === 0) {\n    throw new Error('Pass the files to upload: node bulk-migrate-users.mjs users-1.json users-2.json');\n  }\n  if (missingFiles.length > 0) {\n    throw new Error(`Files not found: ${missingFiles.join(', ')}`);\n  }\n  const fileNames = [];\n  for (const filePath of filePaths) {\n    const fileName = basename(filePath);\n    const file = await openAsBlob(filePath);\n    const startedAt = Date.now();\n    console.log(`Uploading ${fileName} (${(file.size / 1024 ** 2).toFixed(1)} MB)`);\n    const {\n      files: [uploadForm],\n    } = await callApi('POST', '/v1/migration/users/files/upload-urls', { files: [fileName] });\n    const form = new FormData();\n    for (const [field, value] of Object.entries(uploadForm.fields)) {\n      form.append(field, value);\n    }\n    form.append('file', file, fileName);\n    const upload = await fetch(uploadForm.url, { method: 'POST', body: form });\n    if (!upload.ok) {\n      throw new Error(`Uploading ${fileName} failed with ${upload.status}`);\n    }\n    console.log(`Uploaded ${fileName} in ${Math.round((Date.now() - startedAt) / 1000)}s`);\n    fileNames.push(fileName);\n  }\n  return fileNames;\n}\n\n// 2. Start a migration run on the uploaded files\nasync function startRun(fileNames) {\n  const { run_id: runId } = await callApi('POST', '/v1/migration/users/runs', {\n    mode: MODE,\n    app_id: APP_ID,\n    files: fileNames,\n  });\n  console.log(`Started run ${runId}`);\n  return runId;\n}\n\n// 3. Poll the run status until the run finishes\nasync function pollRunStatus(runId) {\n  while (true) {\n    const run = await callApi('GET', `/v1/migration/users/runs/${runId}`);\n    console.log(`${run.status}: processed ${run.processed}, created ${run.created}, failed ${run.failed}`);\n    if (run.status !== 'running') {\n      return run;\n    }\n    for (let seconds = 10; seconds > 0; seconds -= 1) {\n      process.stdout.write(`\\rNext check in ${seconds}s `);\n      await sleep(1000);\n    }\n    process.stdout.write('\\r');\n  }\n}\n\n// 4. Save the report of each file\nasync function saveReports(run) {\n  for (const { name, outcome_url: outcomeUrl } of run.files) {\n    if (outcomeUrl) {\n      const reportPath = name.replace(/\\.json$/, '.report.json');\n      console.log(`Downloading the report of ${name}`);\n      const report = await fetch(outcomeUrl);\n      const reportBytes = await report.arrayBuffer();\n      await writeFile(reportPath, new Uint8Array(reportBytes));\n      console.log(`Saved ${reportPath}`);\n    }\n  }\n}\n\ntry {\n  const fileNames = await uploadFiles(FILE_PATHS);\n  const runId = await startRun(fileNames);\n  const run = await pollRunStatus(runId);\n  await saveReports(run);\n} catch (error) {\n  console.error(error.message);\n  process.exitCode = 1;\n}\n","lang":"js"},"children":[]}]}]}]},"headings":[{"value":"Set up bulk user import","id":"set-up-bulk-user-import","depth":1},{"value":"How it works","id":"how-it-works","depth":2},{"value":"Before you start","id":"before-you-start","depth":2},{"value":"Step 1: Create a management app","id":"step-1-create-a-management-app","depth":2},{"value":"Step 2: Align the user schema","id":"step-2-align-the-user-schema","depth":2},{"value":"Step 3: Prepare the JSON file","id":"step-3-prepare-the-json-file","depth":2},{"value":"Step 4: Upload the files","id":"step-4-upload-the-files","depth":2},{"value":"Request upload URLs","id":"request-upload-urls","depth":3},{"value":"Upload each file","id":"upload-each-file","depth":3},{"value":"Step 5: Start the import","id":"step-5-start-the-import","depth":2},{"value":"Step 6: Track progress and review failures","id":"step-6-track-progress-and-review-failures","depth":2},{"value":"Step 7: Cancel a run","id":"step-7-cancel-a-run","depth":2},{"value":"Upload file management","id":"upload-file-management","depth":2},{"value":"Sample migration script","id":"sample-migration-script","depth":2}],"frontmatter":{"markdown":{"toc":{"depth":2}},"seo":{"title":"Set up bulk user import"}},"lastModified":"2026-10-27T08:47:36.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/platform/bulk_user_migration","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}