Projectbeheer
Beheer projecten binnen mindzieStudio tenants. Maak projecten aan, haal ze op, werk ze bij en verwijder ze die datasets, onderzoeken, dashboards en analyse-workflows bevatten.
Connectiviteitstest
Niet-geautoriseerde Ping
GET /api/{tenantId}/project/unauthorized-ping
Test endpoint dat geen authenticatie vereist. Gebruik dit om netwerkconnectiviteit te verifiëren.
Response
Ping succesvol
Geauthentiseerde Ping
GET /api/{tenantId}/project/ping
Geauthentiseerd ping-endpoint om API-toegang voor een specifieke tenant te verifiëren.
Response (200 OK)
Ping succesvol (tenant id: {tenantId})
Lijst met alle projecten
GET /api/{tenantId}/project
Haalt een gepagineerde lijst op van alle projecten waar de geauthenticeerde gebruiker toegang toe heeft binnen de opgegeven tenant.
Padparameters
| Parameter | Type | Vereist | Beschrijving |
|---|---|---|---|
tenantId |
GUID | Ja | De tenant identificatie |
Queryparameters
| Parameter | Type | Standaard | Beschrijving |
|---|---|---|---|
page |
integer | 1 | Paginanummer voor paginering |
pageSize |
integer | 50 | Aantal items per pagina (max aanbevolen: 100) |
Response (200 OK)
{
"projects": [
{
"projectId": "87654321-4321-4321-4321-210987654321",
"tenantId": "12345678-1234-1234-1234-123456789012",
"projectName": "Purchase Order Analysis",
"projectDescription": "Process mining analysis of P2P workflow",
"dateCreated": "2024-01-15T10:30:00Z",
"dateModified": "2024-01-20T14:45:00Z",
"createdBy": "user@example.com",
"modifiedBy": "user@example.com",
"isActive": true,
"datasetCount": 3,
"investigationCount": 5,
"dashboardCount": 2,
"userCount": 8
}
],
"totalCount": 15,
"page": 1,
"pageSize": 50
}
Velden van het Project Object
| Veld | Type | Beschrijving |
|---|---|---|
projectId |
GUID | Unieke identificatie van het project |
tenantId |
GUID | Tenant waartoe dit project behoort |
projectName |
string | Weergavenaam van het project |
projectDescription |
string | Beschrijving van het project |
dateCreated |
datetime | Wanneer het project is aangemaakt |
dateModified |
datetime | Wanneer het project voor het laatst is aangepast |
createdBy |
string | Gebruiker die het project heeft aangemaakt |
modifiedBy |
string | Gebruiker die het project voor het laatst heeft gewijzigd |
isActive |
boolean | Of het project actief is |
datasetCount |
integer | Aantal datasets in het project |
investigationCount |
integer | Aantal onderzoeken |
dashboardCount |
integer | Aantal dashboards |
userCount |
integer | Aantal gebruikers met toegang |
Haal projectdetails op
GET /api/{tenantId}/project/{projectId}
Haalt gedetailleerde informatie op voor een specifiek project.
Padparameters
| Parameter | Type | Vereist | Beschrijving |
|---|---|---|---|
tenantId |
GUID | Ja | De tenant identificatie |
projectId |
GUID | Ja | De project identificatie |
Response (200 OK)
Dezelfde structuur als het projectobject in de lijstresponse.
Foutresponses
Niet gevonden (404):
{
"error": "Project niet gevonden met ID '{projectId}'. Het project kan zijn verwijderd of de ID is onjuist.",
"projectId": "87654321-4321-4321-4321-210987654321"
}
Haal projectoverzicht op
GET /api/{tenantId}/project/{projectId}/summary
Haalt geaggregeerde statistieken en belangrijke metrics op voor het project.
Response (200 OK)
{
"projectId": "87654321-4321-4321-4321-210987654321",
"projectName": "Purchase Order Analysis",
"projectDescription": "Process mining analysis of P2P workflow",
"dateCreated": "2024-01-15T10:30:00Z",
"dateModified": "2024-01-20T14:45:00Z",
"statistics": {
"totalDatasets": 3,
"totalInvestigations": 5,
"totalDashboards": 2,
"totalNotebooks": 12,
"totalUsers": 8
}
}
Project aanmaken
POST /api/{tenantId}/project
Maakt een nieuw project aan binnen de opgegeven tenant.
Verzoekbody
{
"projectName": "New Analysis Project",
"projectDescription": "Process mining analysis for procurement workflow"
}
Verzoekvelden
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
projectName |
string | Ja | Projectnaam (max 255 tekens) |
projectDescription |
string | Nee | Beschrijving (max 1000 tekens) |
Response (201 Created)
Geef het aangemaakte projectobject terug (zelfde structuur als Haal project op).
Foutresponses
Ongeldig verzoek (400):
{
"error": "Validatie mislukt",
"validationErrors": ["Projectnaam is verplicht"]
}
Project bijwerken
PUT /api/{tenantId}/project/{projectId}
Werkt de eigenschappen van een bestaand project bij.
Padparameters
| Parameter | Type | Beschrijving |
|---|---|---|
tenantId |
GUID | De tenant identificatie |
projectId |
GUID | De project identificatie |
Verzoekbody
{
"projectName": "Updated Project Name",
"projectDescription": "Updated description",
"isActive": true
}
Verzoekvelden
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
projectName |
string | Ja | Nieuwe projectnaam |
projectDescription |
string | Nee | Nieuwe beschrijving |
isActive |
boolean | Nee | Project aan/uit zetten |
Response (200 OK)
Geef het bijgewerkte projectobject terug.
Project verwijderen
DELETE /api/{tenantId}/project/{projectId}
Verwijdert een project en ALLE daaraan gekoppelde data permanent.
WAARSCHUWING: Dit is een DESTRUCTIEVE actie die NIET ongedaan gemaakt kan worden.
Cascade verwijdering omvat
- Alle datasets in het project
- Alle onderzoeken en notebooks
- Alle dashboards
- Alle gebruikersrechten
- Alle blob opslagbestanden (event logs, bijlagen)
Padparameters
| Parameter | Type | Beschrijving |
|---|---|---|
tenantId |
GUID | De tenant identificatie |
projectId |
GUID | De project identificatie |
Response (200 OK)
{
"message": "Project succesvol verwijderd",
"projectId": "87654321-4321-4321-4321-210987654321"
}
Implementatievoorbeelden
cURL
# Lijst met alle projecten
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Haal projectdetails op
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Maak een nieuw project aan
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"projectName": "Q4 Analysis",
"projectDescription": "Kwartaalanalyse inkoop"
}'
# Werk een project bij
curl -X PUT "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"projectName": "Q4 Analysis - Final",
"projectDescription": "Bijgewerkte beschrijving"
}'
# Verwijder een project (LET OP: Onomkeerbaar!)
curl -X DELETE "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Python
import requests
TENANT_ID = '12345678-1234-1234-1234-123456789012'
BASE_URL = 'https://your-mindzie-instance.com'
class ProjectManager:
def __init__(self, token):
self.headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
def list_projects(self, page=1, page_size=50):
"""Lijst alle projecten in de tenant."""
url = f'{BASE_URL}/api/{TENANT_ID}/project'
params = {'page': page, 'pageSize': page_size}
response = requests.get(url, headers=self.headers, params=params)
response.raise_for_status()
return response.json()
def get_project(self, project_id):
"""Haal projectdetails op."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}'
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
def create_project(self, name, description=''):
"""Maak een nieuw project aan."""
url = f'{BASE_URL}/api/{TENANT_ID}/project'
payload = {
'projectName': name,
'projectDescription': description
}
response = requests.post(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
def update_project(self, project_id, name=None, description=None, is_active=None):
"""Werk een bestaand project bij."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}'
payload = {}
if name:
payload['projectName'] = name
if description is not None:
payload['projectDescription'] = description
if is_active is not None:
payload['isActive'] = is_active
response = requests.put(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
def delete_project(self, project_id):
"""Verwijder een project (LET OP: Onomkeerbaar!)."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}'
response = requests.delete(url, headers=self.headers)
response.raise_for_status()
return response.json()
# Gebruik
manager = ProjectManager('your-auth-token')
# Lijst alle projecten
result = manager.list_projects()
print(f"Totaal aantal projecten: {result['totalCount']}")
for project in result['projects']:
print(f"- {project['projectName']}: {project['datasetCount']} datasets")
# Maak een nieuw project aan
new_project = manager.create_project(
name='API Test Project',
description='Gemaakt via API'
)
print(f"Aangemaakt: {new_project['projectId']}")
JavaScript/Node.js
const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const BASE_URL = 'https://your-mindzie-instance.com';
class ProjectManager {
constructor(token) {
this.headers = {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
};
}
async listProjects(page = 1, pageSize = 50) {
const url = `${BASE_URL}/api/${TENANT_ID}/project?page=${page}&pageSize=${pageSize}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
return await response.json();
}
async getProject(projectId) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
return await response.json();
}
async createProject(name, description = '') {
const url = `${BASE_URL}/api/${TENANT_ID}/project`;
const response = await fetch(url, {
method: 'POST',
headers: this.headers,
body: JSON.stringify({ projectName: name, projectDescription: description })
});
if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
return await response.json();
}
async deleteProject(projectId) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}`;
const response = await fetch(url, {
method: 'DELETE',
headers: this.headers
});
if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
return await response.json();
}
}
// Gebruik
const manager = new ProjectManager('your-auth-token');
const projects = await manager.listProjects();
console.log(`Gevonden ${projects.totalCount} projecten`);