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`);