On This Page

API Reference: Data

warning

Deleting a dataset will permanently remove all associated datatables and data. This action cannot be undone.

Usage:

# Get the presigned URL with required parameters
URL=$(curl -s -H "X-API-Key: your-api-key" \
  "https://api.processmind.com/v1/tenant/{tenantId}/datatables/{datatableId}/uploads/presigned-url?datasetid={datasetId}&filename=data.csv&filesize=1024&filelastmodified=1704067200000")

# Upload the file
curl -X PUT --upload-file "data.csv" -H "Content-Type: text/csv" "$URL"

info

Presigned URLs expire after a limited time. Use the URL promptly after obtaining it. If the upload fails, request a new presigned URL.

Usage:

# Get the download URL
RESPONSE=$(curl -s -H "X-API-Key: your-api-key" \
  "https://api.processmind.com/v1/tenant/{tenantId}/datatables/{dataTableId}/download")

# Extract URL and download the file
DOWNLOAD_URL=$(echo $RESPONSE | jq -r '.downloadUrl')
curl -o "data.csv" "$DOWNLOAD_URL"

info

For uploaded datatables, the original file format is preserved (CSV, Parquet, ORC, JSONL, or Excel). For simulation results, the file is always CSV format.

Usage:

# Get delta presigned URL
RESPONSE=$(curl -s -H "X-API-Key: your-api-key" \
  "https://api.processmind.com/v1/tenant/{tenantId}/datatables/{dataTableId}/uploads/presigned-url?delta=true&filename=delta.csv&filesize=1024&filelastmodified=1704067200000")

# Upload the delta file
UPLOAD_URL=$(echo $RESPONSE | jq -r '.PreSignedUploadUrl')
curl -X PUT --upload-file "delta.csv" -H "Content-Type: text/csv" "$UPLOAD_URL"

info

The datatable must already have initial data loaded before delta uploads can be used. The delta file must use the same format as the original upload (for example, CSV delta for CSV original, Parquet delta for Parquet original) and have the same column structure. Excel and XES files are not supported for delta uploads.

info

After uploading through the presigned URL, ProcessMind automatically processes the delta and combines it with the original data. Poll GET /datatables/{dataTableId} until hasDataLoaded is true to know when processing is done.

Datasets are collections of related datatables that belong together logically.

List datasets

Endpoint: GET /v1/tenant/{tenantId}/datasets

Auth: Tenant-scoped API key · read scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
limit integer query No Maximum number of items to return
offset integer query No Number of items to skip

Response (200):

List of datasets

[
	{
		"id": "00000000-0000-0000-0000-000000000000",
		"treeParentId": "00000000-0000-0000-0000-000000000000",
		"treeNodeType": "Dataset",
		"displayName": "string",
		"createdAt": "2024-03-15T16:30:00Z",
		"updatedAt": "2024-03-15T16:30:00Z",
		"dataTableId": "00000000-0000-0000-0000-000000000000"
	}
]

Errors:

  • 401 Missing, invalid, disabled or expired API key

Create a dataset (with an empty datatable)

Endpoint: POST /v1/tenant/{tenantId}/datasets

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid

Request Body:

{
	"displayName": "string",
	"treeParentId": "00000000-0000-0000-0000-000000000000",
	"treeNodeType": "Dataset"
}
Field Type Required Description
displayName string Yes Dataset name shown in the data tree
Max length: 128
treeParentId string No Parent folder id (null = top level)
Format: uuid
treeNodeType Dataset | TreeGroup No Dataset or folder
Allowed values: Dataset, TreeGroup
Default: Dataset

Response (201):

Created dataset

{
	"id": "00000000-0000-0000-0000-000000000000",
	"treeParentId": "00000000-0000-0000-0000-000000000000",
	"treeNodeType": "Dataset",
	"displayName": "string",
	"createdAt": "2024-03-15T16:30:00Z",
	"updatedAt": "2024-03-15T16:30:00Z",
	"dataTableId": "00000000-0000-0000-0000-000000000000"
}
Field Type Required Description
id string Yes Format: uuid
treeParentId string Yes Format: uuid
treeNodeType Dataset | TreeGroup Yes Allowed values: Dataset, TreeGroup
Default: Dataset
displayName string Yes Default: ""
Max length: 128
createdAt string Yes Format: date-time
updatedAt string Yes Format: date-time
dataTableId string Yes Format: uuid

Errors:

  • 401 Missing, invalid, disabled or expired API key

Get a dataset

Endpoint: GET /v1/tenant/{tenantId}/datasets/{datasetId}

Auth: Tenant-scoped API key · read scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
datasetId string path Yes Format: uuid

Response (200):

Dataset

{
	"id": "00000000-0000-0000-0000-000000000000",
	"treeParentId": "00000000-0000-0000-0000-000000000000",
	"treeNodeType": "Dataset",
	"displayName": "string",
	"createdAt": "2024-03-15T16:30:00Z",
	"updatedAt": "2024-03-15T16:30:00Z",
	"dataTableId": "00000000-0000-0000-0000-000000000000"
}
Field Type Required Description
id string Yes Format: uuid
treeParentId string Yes Format: uuid
treeNodeType Dataset | TreeGroup Yes Allowed values: Dataset, TreeGroup
Default: Dataset
displayName string Yes Default: ""
Max length: 128
createdAt string Yes Format: date-time
updatedAt string Yes Format: date-time
dataTableId string Yes Format: uuid

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 404 Resource not found

Soft-delete a dataset

Endpoint: DELETE /v1/tenant/{tenantId}/datasets/{datasetId}

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
datasetId string path Yes Format: uuid

Response (200):

Dataset deleted

{
	"success": true,
	"message": "string"
}
Field Type Required Description
success boolean Yes
message string Yes

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 404 Resource not found

List the datatables of a dataset

Endpoint: GET /v1/tenant/{tenantId}/datasets/{datasetId}/datatables

Auth: Tenant-scoped API key · read scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
datasetId string path Yes Format: uuid
limit integer query No Maximum number of items to return
offset integer query No Number of items to skip

Response (200):

List of datatables in the dataset

[
	{
		"id": "00000000-0000-0000-0000-000000000000",
		"datasetId": "00000000-0000-0000-0000-000000000000",
		"displayName": "string",
		"createdAt": "2024-03-15T16:30:00Z",
		"updatedAt": "2024-03-15T16:30:00Z",
		"hasDataLoaded": true,
		"filterExpression": "string",
		"metaInfo": {
			"type": "nodata"
		}
	}
]

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 404 Resource not found

Create an empty datatable inside a dataset

Endpoint: POST /v1/tenant/{tenantId}/datasets/{datasetId}/datatables

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
datasetId string path Yes Format: uuid

Request Body:

{
	"displayName": "string"
}
Field Type Required Description
displayName string Yes Datatable name
Max length: 128

Response (201):

Created datatable

{
	"id": "00000000-0000-0000-0000-000000000000",
	"datasetId": "00000000-0000-0000-0000-000000000000",
	"displayName": "string",
	"createdAt": "2024-03-15T16:30:00Z",
	"updatedAt": "2024-03-15T16:30:00Z",
	"hasDataLoaded": true,
	"filterExpression": "string",
	"metaInfo": {
		"type": "nodata"
	}
}
Field Type Required Description
id string Yes Format: uuid
datasetId string Yes Format: uuid
displayName string Yes Default: ""
Max length: 128
createdAt string Yes Format: date-time
updatedAt string Yes Format: date-time
hasDataLoaded boolean Yes Default: false
filterExpression string Yes Max length: 4096
metaInfo object | object | object | object Yes

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 404 Resource not found

Datatables store the actual event log data used for process mining.

List datatables

Endpoint: GET /v1/tenant/{tenantId}/datatables

Auth: Tenant-scoped API key · read scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
limit integer query No Maximum number of items to return
offset integer query No Number of items to skip

Response (200):

List of datatables

[
	{
		"id": "00000000-0000-0000-0000-000000000000",
		"datasetId": "00000000-0000-0000-0000-000000000000",
		"displayName": "string",
		"createdAt": "2024-03-15T16:30:00Z",
		"updatedAt": "2024-03-15T16:30:00Z",
		"hasDataLoaded": true,
		"filterExpression": "string",
		"metaInfo": {
			"type": "nodata"
		}
	}
]

Errors:

  • 401 Missing, invalid, disabled or expired API key

Get a datatable

Endpoint: GET /v1/tenant/{tenantId}/datatables/{dataTableId}

Auth: Tenant-scoped API key · read scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid

Response (200):

Datatable

{
	"id": "00000000-0000-0000-0000-000000000000",
	"datasetId": "00000000-0000-0000-0000-000000000000",
	"displayName": "string",
	"createdAt": "2024-03-15T16:30:00Z",
	"updatedAt": "2024-03-15T16:30:00Z",
	"hasDataLoaded": true,
	"filterExpression": "string",
	"metaInfo": {
		"type": "nodata"
	}
}
Field Type Required Description
id string Yes Format: uuid
datasetId string Yes Format: uuid
displayName string Yes Default: ""
Max length: 128
createdAt string Yes Format: date-time
updatedAt string Yes Format: date-time
hasDataLoaded boolean Yes Default: false
filterExpression string Yes Max length: 4096
metaInfo object | object | object | object Yes

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 404 Resource not found

Update a datatable (displayName, parseSettings, …)

Endpoint: PUT /v1/tenant/{tenantId}/datatables/{dataTableId}

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid

Request Body:

{
	"displayName": "string",
	"filterExpression": "string"
}
Field Type Required Description
displayName string No Datatable name
Max length: 128
filterExpression string No Filter expression applied to the data
Max length: 4096

Response (200):

Updated datatable

{
	"id": "00000000-0000-0000-0000-000000000000",
	"datasetId": "00000000-0000-0000-0000-000000000000",
	"displayName": "string",
	"createdAt": "2024-03-15T16:30:00Z",
	"updatedAt": "2024-03-15T16:30:00Z",
	"hasDataLoaded": true,
	"filterExpression": "string",
	"metaInfo": {
		"type": "nodata"
	}
}
Field Type Required Description
id string Yes Format: uuid
datasetId string Yes Format: uuid
displayName string Yes Default: ""
Max length: 128
createdAt string Yes Format: date-time
updatedAt string Yes Format: date-time
hasDataLoaded boolean Yes Default: false
filterExpression string Yes Max length: 4096
metaInfo object | object | object | object Yes

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 404 Resource not found

Get a presigned URL to download the datatable’s source file

Endpoint: GET /v1/tenant/{tenantId}/datatables/{dataTableId}/download

Auth: Tenant-scoped API key · read scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid

Response (200):

Download URL

{
	"downloadUrl": "string",
	"expiresInSeconds": 0
}
Field Type Required Description
downloadUrl string Yes
expiresInSeconds number Yes

Errors:

  • 400 Bad request: e.g. an invalid filter expression, a process without a model, an unsupported upload type or a missing required field
  • 401 Missing, invalid, disabled or expired API key
  • 404 Resource not found

Abort a multipart upload and discard the uploaded parts

Requires the uploadData scope on the API key.

Endpoint: POST /v1/tenant/{tenantId}/datatables/{dataTableId}/uploads/multipart/abort

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid

Request Body:

{
	"uploadId": "string",
	"uploadHandle": "string"
}
Field Type Required Description
uploadId string Yes
uploadHandle string Yes Opaque handle returned by the initiate step

Response (200):

Aborted

{
	"message": "string"
}
Field Type Required Description
message string Yes

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 403 API key lacks the required scope or organization access, the tenant is inactive, or the plan blocks the file type
  • 404 Resource not found

Complete a multipart upload (step 3 of 3)

Requires the uploadData scope on the API key. Assembles the uploaded parts (using their ETags) and triggers event log processing.

Endpoint: POST /v1/tenant/{tenantId}/datatables/{dataTableId}/uploads/multipart/complete

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid

Request Body:

{
	"uploadId": "string",
	"uploadHandle": "string",
	"parts": [
		{
			"partNumber": 0,
			"eTag": "string"
		}
	]
}
Field Type Required Description
uploadId string Yes
uploadHandle string Yes Opaque handle returned by the initiate step
parts object[] Yes

Response (200):

Completed ({ completed: true })

{
	"message": "string"
}
Field Type Required Description
message string Yes

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 403 API key lacks the required scope or organization access, the tenant is inactive, or the plan blocks the file type
  • 404 Resource not found

Start a multipart (chunked) upload for event log data (step 1 of 3)

Requires the uploadData scope on the API key. Returns an uploadId and an opaque uploadHandle to pass to the subsequent parts, complete and abort calls. Suitable for large files.

Endpoint: POST /v1/tenant/{tenantId}/datatables/{dataTableId}/uploads/multipart/initiate

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid

Request Body:

{
	"fileName": "string",
	"fileSize": 0,
	"fileLastModified": 0,
	"partCount": 0,
	"delta": true,
	"datasetId": "00000000-0000-0000-0000-000000000000",
	"modelId": "00000000-0000-0000-0000-000000000000"
}
Field Type Required Description
fileName string Yes
fileSize number Yes
fileLastModified number Yes
partCount number No Number of parts to presign (default 10)
delta boolean No Whether this is a delta (incremental) upload
datasetId string No Format: uuid
modelId string No Format: uuid

Response (200):

Initiated upload

{
	"uploadId": "string",
	"uploadHandle": "string",
	"partCount": 0,
	"partSizeBytes": 0
}
Field Type Required Description
uploadId string No
uploadHandle string No Opaque handle for the parts/complete/abort steps
partCount number No
partSizeBytes number No

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 403 API key lacks the required scope or organization access, the tenant is inactive, or the plan blocks the file type
  • 404 Resource not found

Get presigned URLs for the parts of a multipart upload (step 2 of 3)

Requires the uploadData scope on the API key. Returns one presigned PUT URL per requested part number.

Endpoint: POST /v1/tenant/{tenantId}/datatables/{dataTableId}/uploads/multipart/parts

Auth: Tenant-scoped API key · write scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid

Request Body:

{
	"uploadId": "string",
	"uploadHandle": "string",
	"partNumbers": [
		0
	]
}
Field Type Required Description
uploadId string Yes
uploadHandle string Yes Opaque handle returned by the initiate step
partNumbers number[] Yes

Response (200):

Part presigned URLs ({ uploadId, parts: [{ partNumber, url }] })

{
	"message": "string"
}
Field Type Required Description
message string Yes

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 403 API key lacks the required scope or organization access, the tenant is inactive, or the plan blocks the file type
  • 404 Resource not found

Get a presigned S3 upload URL for event log data (CSV/XLSX, full or delta)

Requires the uploadData scope on the API key (independent of read/write). The declared filesize (bytes) is checked against the platform’s maximum upload size; the actual object size is re-verified when the file lands.

Endpoint: GET /v1/tenant/{tenantId}/datatables/{dataTableId}/uploads/presigned-url

Auth: Tenant-scoped API key · read scope

Parameters:

Name Type Location Required Description
tenantId string path Yes Format: uuid
dataTableId string path Yes Format: uuid
filename string query Yes
filesize string query Yes File size in bytes (checked against the platform’s maximum upload size)
filelastmodified string query Yes
datasetid string query No Required for full (non-delta) uploads
modelid string query No Format: uuid
delta true | false query No Allowed values: true, false
partnumber string query No
validforseconds integer query No Presigned URL lifetime in seconds (1–3600, default 3600)

Response (200):

Presigned URL

{
	"PreSignedUploadUrl": "string"
}
Field Type Required Description
PreSignedUploadUrl string Yes Presigned S3 PUT URL (valid ~1h)

Errors:

  • 401 Missing, invalid, disabled or expired API key
  • 403 API key lacks the required scope or organization access, the tenant is inactive, or the plan blocks the file type
  • 404 Resource not found
  • 413 File exceeds the platform’s maximum upload size

Design better processes. Build a connected architecture. Stay in control.

Get instant access with no credit card and no waiting. Turn the way your organization works into clear, connected process designs.

Build your process architecture, define ownership and controls, and align roles and responsibilities across every level.

Start your free trial and create one reliable foundation for governing, managing, and continuously improving your processes.