Templatebeheer

Volledige CRUD-bewerkingen voor het beheer van notebook-sjablonen. Voor alle endpoints is een Globale API-sleutel vereist.


Overzicht Globale Sjablonen

GET /api/templates

Geeft alle globale sjablonen terug die beschikbaar zijn voor alle tenants.

Respons (200 OK)

{
  "templates": [
    {
      "templateId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "name": "Process Discovery",
      "description": "Standaard proces-ontdekking workflow",
      "category": "Templates",
      "processName": "Order to Cash",
      "tenantId": null,
      "isGlobal": true,
      "hasThumbnail": true,
      "autoAddedDefaultSortOrder": 100,
      "dateModified": "2024-01-15T10:30:00Z"
    }
  ],
  "totalCount": 1
}

Overzicht Sjablonen per Tenant

GET /api/templates/tenant/{tenantId}

Geeft alle sjablonen terug die beschikbaar zijn voor een specifieke tenant, inclusief zowel globale als tenant-specifieke sjablonen.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie

Respons (200 OK)

{
  "templates": [
    {
      "templateId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "name": "Process Discovery",
      "description": "Standaard proces-ontdekking workflow",
      "category": "Templates",
      "processName": "Order to Cash",
      "tenantId": null,
      "isGlobal": true,
      "hasThumbnail": true,
      "autoAddedDefaultSortOrder": 100,
      "dateCreated": "2024-01-01T00:00:00Z",
      "dateModified": "2024-01-15T10:30:00Z",
      "createdByName": "System",
      "modifiedByName": "System"
    },
    {
      "templateId": "bbbbbbbb-cccc-dddd-eeee-ffffffffffff",
      "name": "Custom Analysis",
      "description": "Tenant-specifieke aangepaste analyse",
      "category": "Custom",
      "processName": null,
      "tenantId": "12345678-1234-1234-1234-123456789012",
      "isGlobal": false,
      "hasThumbnail": false,
      "autoAddedDefaultSortOrder": 0,
      "dateCreated": "2024-02-01T09:00:00Z",
      "dateModified": "2024-02-15T14:30:00Z",
      "createdByName": "API",
      "modifiedByName": "API"
    }
  ],
  "totalCount": 2
}

Overzicht Sjablonen per Categorie

GET /api/templates/category/{category}

Geeft sjablonen terug die gefilterd zijn op categorie.

Padparameters

Parameter Type Vereist Beschrijving
category string Ja Categorienaam: Templates, Custom, of BaseKnowledge

Query Parameters

Parameter Type Vereist Beschrijving
tenantId GUID Nee Filter op sjablonen van een specifieke tenant

Voorbeeld

# Alle aangepaste sjablonen ophalen
curl -X GET "https://your-mindzie-instance.com/api/templates/category/Custom" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Aangepaste sjablonen voor een specifieke tenant ophalen
curl -X GET "https://your-mindzie-instance.com/api/templates/category/Custom?tenantId=12345678-1234-1234-1234-123456789012" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

Details van een Sjabloon Ophalen

GET /api/templates/{templateId}

Geeft volledige details van een sjabloon terug inclusief de MCL-configuratie tekst.

Padparameters

Parameter Type Vereist Beschrijving
templateId GUID Ja De sjabloon-identificatie

Respons (200 OK)

{
  "templateId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "name": "Process Discovery",
  "description": "Standaard proces-ontdekking workflow met variantanalyse",
  "category": "Templates",
  "processName": "Order to Cash",
  "mclText": "// MCL configuratie defining notebook blocks and settings\n{\n  \"blocks\": [...],\n  \"settings\": {...}\n}",
  "tenantId": null,
  "isGlobal": true,
  "hasThumbnail": true,
  "autoAddedDefaultSortOrder": 100,
  "originatingNotebookId": null,
  "dateCreated": "2024-01-01T00:00:00Z",
  "dateModified": "2024-01-15T10:30:00Z",
  "createdBy": null,
  "createdByName": "System",
  "modifiedBy": null,
  "modifiedByName": "System"
}

Responsvelden

Veld Type Beschrijving
templateId GUID Unieke identificatie
name string Naam van het sjabloon
description string Beschrijving van het sjabloon
category string Categorie (Templates, Custom, BaseKnowledge)
processName string Naam van het bijbehorende proces
mclText string MCL configuratietekst
tenantId GUID Tenant ID (null voor globale sjablonen)
isGlobal boolean Waar indien dit een globaal sjabloon is
hasThumbnail boolean Waar indien er een thumbnail afbeelding bestaat
autoAddedDefaultSortOrder integer Weergave sorteervolgorde
originatingNotebookId GUID Bronnotebook als gemaakt van een bestaand notebook
dateCreated datetime Aanmaakdatum en tijd
dateModified datetime Laatste wijzigingsdatum en tijd
createdBy GUID ID van de maker
createdByName string Naam van de maker
modifiedBy GUID ID van de laatste aanpasser
modifiedByName string Naam van de laatste aanpasser

Foutresponsen

Niet Gevonden (404)

{
  "error": "Sjabloon met ID 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' niet gevonden"
}

Thumbnail van Sjabloon Ophalen

GET /api/templates/{templateId}/thumbnail

Geeft de thumbnail afbeelding van een sjabloon terug.

Padparameters

Parameter Type Vereist Beschrijving
templateId GUID Ja De sjabloon-identificatie

Respons (200 OK)

Geeft JPEG afbeeldingsdata terug met Content-Type: image/jpeg.

Foutresponsen

Niet Gevonden (404)

{
  "error": "Thumbnail niet gevonden voor sjabloon 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'"
}

Sjabloon Aanmaken

POST /api/templates/tenant/{tenantId}

Maakt een nieuw tenant-specifiek sjabloon aan. Globale sjablonen kunnen niet via de API worden aangemaakt.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie

Request Body

{
  "name": "Custom Analysis Template",
  "description": "Aangepaste analyse workflow voor maandelijkse rapportage",
  "mclText": "// MCL configuratietekst",
  "category": "Custom",
  "processName": "Monthly Report",
  "isGlobal": false,
  "autoAddedDefaultSortOrder": 0
}

Request Velden

Veld Type Vereist Beschrijving
name string Ja Naam van het sjabloon (moet uniek zijn)
description string Nee Beschrijving van het sjabloon
mclText string Ja MCL configuratietekst
category string Nee Categorie (standaard: "Custom")
processName string Nee Naam van het bijbehorende proces
isGlobal boolean Nee Moet false zijn voor API-aanmaak
autoAddedDefaultSortOrder integer Nee Weergave sorteervolgorde

Respons (201 Created)

{
  "templateId": "cccccccc-dddd-eeee-ffff-000000000000",
  "name": "Custom Analysis Template",
  "description": "Aangepaste analyse workflow voor maandelijkse rapportage",
  "category": "Custom",
  "processName": "Monthly Report",
  "mclText": "// MCL configuratietekst",
  "tenantId": "12345678-1234-1234-1234-123456789012",
  "isGlobal": false,
  "hasThumbnail": false,
  "autoAddedDefaultSortOrder": 0,
  "dateCreated": "2024-03-01T10:00:00Z",
  "dateModified": "2024-03-01T10:00:00Z",
  "createdByName": "API"
}

Foutresponsen

Ongeldig Verzoek (400) - Validatie mislukt

{
  "error": "Validatie mislukt",
  "validationErrors": ["Naam is verplicht", "MclText is verplicht"]
}

Conflict (409) - Dubbele Naam

{
  "error": "Er bestaat al een sjabloon met deze naam"
}

Sjabloon Bijwerken

PUT /api/templates/{templateId}

Werkt een bestaand tenant-specifiek sjabloon bij. Globale sjablonen kunnen niet via de API worden bijgewerkt.

Padparameters

Parameter Type Vereist Beschrijving
templateId GUID Ja De sjabloon-identificatie

Request Body

{
  "name": "Bijgewerkte Sjabloonnaam",
  "description": "Bijgewerkte beschrijving",
  "mclText": "// Bijgewerkte MCL configuratie",
  "category": "Custom",
  "processName": "Bijgewerkt Proces",
  "autoAddedDefaultSortOrder": 10
}

Alle velden zijn optioneel - alleen opgegeven velden worden bijgewerkt.

Respons (200 OK)

Geeft de bijgewerkte sjabloon details terug.

Foutresponsen

Ongeldig Verzoek (400) - Globaal Sjabloon

{
  "error": "Globale sjablonen kunnen niet via de API worden bijgewerkt"
}

Niet Gevonden (404)

{
  "error": "Sjabloon niet gevonden"
}

Conflict (409) - Dubbele Naam

{
  "error": "Er bestaat al een sjabloon met deze naam"
}

Sjabloon Verwijderen

DELETE /api/templates/{templateId}

Verwijdert een tenant-specifiek sjabloon. Globale sjablonen kunnen niet via de API worden verwijderd.

Padparameters

Parameter Type Vereist Beschrijving
templateId GUID Ja De sjabloon-identificatie

Respons (200 OK)

{
  "message": "Sjabloon succesvol verwijderd"
}

Foutresponsen

Ongeldig Verzoek (400) - Globaal Sjabloon

{
  "error": "Globale sjablonen kunnen niet worden verwijderd"
}

Niet Gevonden (404)

{
  "error": "Sjabloon niet gevonden"
}

Voorbeelden van Implementatie

cURL

# Alle sjablonen van een tenant opvragen
curl -X GET "https://your-mindzie-instance.com/api/templates/tenant/12345678-1234-1234-1234-123456789012" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Sjabloondetails ophalen
curl -X GET "https://your-mindzie-instance.com/api/templates/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Sjabloon aanmaken
curl -X POST "https://your-mindzie-instance.com/api/templates/tenant/12345678-1234-1234-1234-123456789012" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Custom Template",
    "description": "Aangepaste analyse workflow",
    "mclText": "// MCL configuratie",
    "category": "Custom"
  }'

# Sjabloon bijwerken
curl -X PUT "https://your-mindzie-instance.com/api/templates/cccccccc-dddd-eeee-ffff-000000000000" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Bijgewerkte Naam"}'

# Sjabloon verwijderen
curl -X DELETE "https://your-mindzie-instance.com/api/templates/cccccccc-dddd-eeee-ffff-000000000000" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

Python

import requests

BASE_URL = 'https://your-mindzie-instance.com'
TENANT_ID = '12345678-1234-1234-1234-123456789012'

class TemplateManager:
    def __init__(self, global_api_key):
        self.headers = {
            'Authorization': f'Bearer {global_api_key}',
            'Content-Type': 'application/json'
        }

    def list_templates(self, tenant_id=None):
        """Sjablonen ophalen, optioneel gefilterd op tenant."""
        if tenant_id:
            url = f'{BASE_URL}/api/templates/tenant/{tenant_id}'
        else:
            url = f'{BASE_URL}/api/templates'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def get_template(self, template_id):
        """Details van sjabloon ophalen inclusief MCL tekst."""
        url = f'{BASE_URL}/api/templates/{template_id}'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def create_template(self, tenant_id, name, mcl_text, description=None, category='Custom'):
        """Een nieuw tenant-specifiek sjabloon aanmaken."""
        url = f'{BASE_URL}/api/templates/tenant/{tenant_id}'
        data = {
            'name': name,
            'mclText': mcl_text,
            'description': description,
            'category': category
        }
        response = requests.post(url, json=data, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def update_template(self, template_id, **kwargs):
        """Een sjabloon bijwerken. Alleen opgegeven velden worden aangepast."""
        url = f'{BASE_URL}/api/templates/{template_id}'
        response = requests.put(url, json=kwargs, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def delete_template(self, template_id):
        """Een tenant-specifiek sjabloon verwijderen."""
        url = f'{BASE_URL}/api/templates/{template_id}'
        response = requests.delete(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

# Gebruik
manager = TemplateManager('your-global-api-key')

# Sjablonen ophalen
templates = manager.list_templates(TENANT_ID)
print(f"Er zijn {templates['totalCount']} sjablonen gevonden")

for t in templates['templates']:
    print(f"  - {t['name']} ({'Globaal' if t['isGlobal'] else 'Tenant'})")

# Sjabloon aanmaken
new_template = manager.create_template(
    tenant_id=TENANT_ID,
    name='My Analysis Template',
    mcl_text='// MCL configuratie hier',
    description='Aangepaste workflow'
)
print(f"Aangemaakt sjabloon: {new_template['templateId']}")

# Sjabloon bijwerken
updated = manager.update_template(
    new_template['templateId'],
    name='Hernoemd Sjabloon'
)

# Sjabloon verwijderen
manager.delete_template(new_template['templateId'])
print("Sjabloon verwijderd")

JavaScript/Node.js

const BASE_URL = 'https://your-mindzie-instance.com';
const TENANT_ID = '12345678-1234-1234-1234-123456789012';

class TemplateManager {
  constructor(globalApiKey) {
    this.headers = {
      'Authorization': `Bearer ${globalApiKey}`,
      'Content-Type': 'application/json'
    };
  }

  async listTemplates(tenantId = null) {
    const url = tenantId
      ? `${BASE_URL}/api/templates/tenant/${tenantId}`
      : `${BASE_URL}/api/templates`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return response.json();
  }

  async getTemplate(templateId) {
    const url = `${BASE_URL}/api/templates/${templateId}`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return response.json();
  }

  async createTemplate(tenantId, name, mclText, description = null, category = 'Custom') {
    const url = `${BASE_URL}/api/templates/tenant/${tenantId}`;
    const response = await fetch(url, {
      method: 'POST',
      headers: this.headers,
      body: JSON.stringify({ name, mclText, description, category })
    });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return response.json();
  }

  async updateTemplate(templateId, updates) {
    const url = `${BASE_URL}/api/templates/${templateId}`;
    const response = await fetch(url, {
      method: 'PUT',
      headers: this.headers,
      body: JSON.stringify(updates)
    });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return response.json();
  }

  async deleteTemplate(templateId) {
    const url = `${BASE_URL}/api/templates/${templateId}`;
    const response = await fetch(url, {
      method: 'DELETE',
      headers: this.headers
    });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return response.json();
  }
}

// Gebruik
const manager = new TemplateManager('your-global-api-key');

// Sjablonen ophalen
const templates = await manager.listTemplates(TENANT_ID);
console.log(`Er zijn ${templates.totalCount} sjablonen gevonden`);

// Sjabloon aanmaken
const newTemplate = await manager.createTemplate(
  TENANT_ID,
  'My Analysis Template',
  '// MCL configuratie',
  'Aangepaste workflow'
);
console.log(`Aangemaakt: ${newTemplate.templateId}`);

// Sjabloon verwijderen
await manager.deleteTemplate(newTemplate.templateId);

Best Practices

  1. Gebruik Globale API-sleutels: Sjabloonbewerkingen vereisen globale API-sleutels
  2. Unieke Namen: Sjabloonnamen moeten uniek zijn binnen hun scope
  3. MCL Tekst: Bewaar volledige MCL configuratie voor reproduceerbare notebooks
  4. Categorieën: Gebruik standaardcategorieën voor organisatie
  5. Thumbnails: Sjablonen die via de API zijn aangemaakt hebben niet automatisch thumbnails