Documentation

    File storage and loading data

    4. File storage

    Every project has file storage, used as a source for data loads and for dashboard images. Requires MD Admin.

    REST

    Files are addressed by fileId, which is the URL-safe base64 of "<name>|<parentPath>".

    MethodPathDescription
    GET/projects/{project}/storage/list?withStats=1List the root folder
    POST/projects/{project}/storage/listCreate a folder: { "folder": "/imports/2026" }
    GET/projects/{project}/storage/list/{fileId}File or folder details and contents
    DELETE/projects/{project}/storage/list/{fileId}Delete a file, or a folder recursively
    GET/projects/{project}/storage/list/{fileId}/downloadDownload a file
    POST/projects/{project}/storage/moveMove or rename: { "source": "/a.csv", "target": "/archive/a.csv" }
    POST/projects/{project}/storage/uploadStart a chunked upload (resumable.js protocol)

    WebDAV

    For simple file transfer, the storage is also available over WebDAV, so any WebDAV client or a mounted drive works:

    https://app.inzata.com/api/v1/projects/{project}/webdav/

    Authentication is HTTP Basic: username = your user id, password = your project WebDAV token. A project Admin sets the token.

    BASH

    curl -u "[email protected]:<webdav-token>" \
         -T sales_2026.csv \
         https://app.inzata.com/api/v1/projects/{project}/webdav/imports/sales_2026.csv

    Uploading a file can also start a data load automatically (see the WebDAV file-change trigger in section 6).

    5. Loading data

    From a file (upload → guess → load)

    1. Upload the file to storage (REST upload or WebDAV).

    2. Detect the structure. Inzata guesses columns, data types and keys:

    HTTP

    GET /api/v1/projects/{project}/data/guessupload/{uploadId}

    JSON

    {
      "ident": "sales_2026",
      "prescription": {
        "clustername": "sales",
        "primarykey": "order_id",
        "columns": [
          { "id": "order_id", "originalheader": "Order ID", "objectType": "A", "dataType": "string", "label": "Order ID" },
          { "id": "amount",   "originalheader": "Amount",   "objectType": "F", "dataType": "number", "label": "Amount" }
        ],
        "data": [["1001", "250.00"], ["1002", "99.90"]]
      }
    }

    objectType is A (attribute), L (label) or F (fact).

    3. Adjust the structure if needed: PUT /data/guessupload/{uploadId} with the edited prescription.

    4. Load the data:

    HTTP

    POST /api/v1/projects/{project}/kodiak/transform/execute
    Content-Type: application/json
    
    { "type": "cluster", "clusters": { "sales": { "source_type": "webdav", "source": "/imports/sales_2026.csv" } } }

    The response contains an scache job link. Poll it until it finishes (see Asynchronous jobs).

    Other resources

    MethodPathDescription
    GET/projects/{project}/kodiak/dataloadCurrent data and model version
    GET/projects/{project}/kodiak/scache/obj?type=transform&status=ERRORList jobs, filtered by type (transform, flow, report, ai) and status
    GET/projects/{project}/store/packagePrebuilt data packages available for the project
    POST/projects/{project}/package/objLoad a package and join it to your data

    Further reading

    Was this helpful?

    Contact support