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
- Gebruik Globale API-sleutels: Sjabloonbewerkingen vereisen globale API-sleutels
- Unieke Namen: Sjabloonnamen moeten uniek zijn binnen hun scope
- MCL Tekst: Bewaar volledige MCL configuratie voor reproduceerbare notebooks
- Categorieën: Gebruik standaardcategorieën voor organisatie
- Thumbnails: Sjablonen die via de API zijn aangemaakt hebben niet automatisch thumbnails