Templates API
Ready-made workflows. List the templates, read one with its parameters, preview the workflow your values make, and save it as a workflow of your own, which the Workflows API then runs, schedules and edits like any other. Templates whose steps need an expert twin are not offered. Every route needs a JWT token or an API key and is rate-limited to 100 requests per minute.
Base path: /api/templates
These routes are not under /api/v2, and they are not in the OpenAPI reference or the SDK clients yet: call them over HTTP.
Browse templates
/api/templatesAuthenticatedThe templates offered, without their workflow definitions.
Query Parameters
categorystringOnly templates of this category.
difficultystringOnly templates of this difficulty: beginner, intermediate or advanced.
searchstringMatch the name, description and tags. When it is given, category and difficulty are not applied.
limitinteger50How many templates to return.
offsetinteger0Pagination offset.
Request
curl -X GET https://api.lvng.ai/api/templates \
-H "Authorization: Bearer YOUR_API_KEY"Response 200
{
"templates": [
{
"id": "daily-briefing",
"name": "Automated Daily Briefing",
"category": "automation",
"description": "Generate a personalized daily briefing from your knowledge graph and project data",
"difficulty": "beginner",
"estimatedTime": "2 minutes",
"icon": "☀️",
"author": "LVNG",
"version": "1.0.0",
"tags": ["automation", "productivity", "daily", "briefing"],
"parameterCount": 2,
"metadata": {
"useCases": ["Morning routine", "Daily planning", "Team updates", "Personal productivity"],
"estimatedCost": "Low",
"requirements": ["Neo4j knowledge graph required", "Scheduled trigger support"]
}
}
],
"total": 1,
"limit": 50,
"offset": 0,
"hasMore": false
}The template in a list
idstringThe template ID, used in every route below.
namestringIts name; a workflow made from it is saved under this name unless you give one.
categorystringIts category (see GET /api/templates/categories).
descriptionstringWhat it does.
difficultystringbeginner, intermediate or advanced.
estimatedTimestringAbout how long a run takes.
iconstringAn icon for it.
authorstringWho made it.
versionstringIts version.
tagsstring[]Words it is found by.
parameterCountintegerHow many parameters it takes (GET /api/templates/:id/preview lists them).
metadataobjectUse cases, estimated cost and requirements.
/api/templates/categoriesAuthenticatedThe categories of the templates offered, with how many each has.
Request
curl -X GET https://api.lvng.ai/api/templates/categories \
-H "Authorization: Bearer YOUR_API_KEY"Response 200
{
"categories": [
{"id": "automation", "name": "Automation", "count": 1}
],
"total": 1
}/api/templates/:idAuthenticatedOne template in full: its parameters and its workflow definition (nodes, edges and triggers), with {{placeholders}} where your parameter values go. An unknown ID answers 404.
Path Parameters
idstringrequiredThe template ID.
Request
curl -X GET https://api.lvng.ai/api/templates/daily-briefing \
-H "Authorization: Bearer YOUR_API_KEY"Response 200
{
"template": {
"id": "daily-briefing",
"name": "Automated Daily Briefing",
"category": "automation",
"description": "Generate a personalized daily briefing from your knowledge graph and project data",
"difficulty": "beginner",
"estimatedTime": "2 minutes",
"icon": "☀️",
"author": "LVNG",
"version": "1.0.0",
"tags": ["automation", "productivity", "daily", "briefing"],
"parameters": [
{
"name": "userName",
"type": "string",
"required": false,
"label": "Your Name",
"description": "Personalize the briefing",
"defaultValue": "User",
"placeholder": "Enter your name"
},
{
"name": "focusAreas",
"type": "string",
"required": false,
"label": "Focus Areas",
"description": "What should the briefing cover?",
"defaultValue": "tasks, meetings, priorities",
"placeholder": "e.g., \"tasks, meetings, priorities, insights\""
}
],
"workflow": {
"nodes": [
{
"id": "input-1",
"type": "input",
"position": {"x": 100, "y": 250},
"data": {"label": "Briefing Request"},
"config": {}
},
{
"id": "knowledge-tasks",
"type": "knowledge_query",
"position": {"x": 350, "y": 150},
"data": {"label": "Fetch Tasks"},
"config": {"search": "tasks action items priorities", "limit": 10}
},
{
"id": "knowledge-meetings",
"type": "knowledge_query",
"position": {"x": 350, "y": 250},
"data": {"label": "Fetch Meetings"},
"config": {"search": "meeting notes agenda", "limit": 10}
},
{
"id": "knowledge-insights",
"type": "knowledge_query",
"position": {"x": 350, "y": 350},
"data": {"label": "Recent Insights"},
"config": {"search": "{{focusAreas}}", "limit": 5}
},
{
"id": "merge-1",
"type": "merge",
"position": {"x": 600, "y": 250},
"data": {"label": "Combine Data"},
"config": {"strategy": "object"}
},
{
"id": "personality-1",
"type": "personality",
"position": {"x": 850, "y": 250},
"data": {"label": "Create Briefing"},
"config": {
"personalityId": "lvng",
"prompt": "Create a personalized daily briefing for {{userName}}.\n\nFocus areas: {{focusAreas}}\n\nData: {{input}}\n\nFormat as:\n# Good Morning, {{userName}}! ☀️\n\n## Today's Priorities\n[Top tasks]\n\n## Scheduled Meetings\n[Meetings for today]\n\n## Recent Insights\n[Key insights from yesterday]\n\n## Focus Recommendation\n[One key thing to focus on today]"
}
},
{
"id": "output-1",
"type": "output",
"position": {"x": 1100, "y": 250},
"data": {"label": "Daily Briefing"},
"config": {}
}
],
"edges": [
{"source": "input-1", "target": "knowledge-tasks"},
{"source": "input-1", "target": "knowledge-meetings"},
{"source": "input-1", "target": "knowledge-insights"},
{"source": "knowledge-tasks", "target": "merge-1"},
{"source": "knowledge-meetings", "target": "merge-1"},
{"source": "knowledge-insights", "target": "merge-1"},
{"source": "merge-1", "target": "personality-1"},
{"source": "personality-1", "target": "output-1"}
],
"triggers": [
{"type": "schedule", "schedule": "0 8 * * *", "enabled": true}
]
},
"metadata": {
"useCases": ["Morning routine", "Daily planning", "Team updates", "Personal productivity"],
"estimatedCost": "Low",
"requirements": ["Neo4j knowledge graph required", "Scheduled trigger support"]
}
}
}/api/templates/:id/previewAuthenticatedOne template with its parameters and a summary of its workflow (how many steps and links, the kinds of step, whether it has a trigger) in place of the definition.
Path Parameters
idstringrequiredThe template ID.
Request
curl -X GET https://api.lvng.ai/api/templates/daily-briefing/preview \
-H "Authorization: Bearer YOUR_API_KEY"Response 200
{
"template": {
"id": "daily-briefing",
"name": "Automated Daily Briefing",
"category": "automation",
"description": "Generate a personalized daily briefing from your knowledge graph and project data",
"difficulty": "beginner",
"estimatedTime": "2 minutes",
"icon": "☀️",
"author": "LVNG",
"version": "1.0.0",
"tags": ["automation", "productivity", "daily", "briefing"],
"parameters": [
{
"name": "userName",
"type": "string",
"required": false,
"label": "Your Name",
"description": "Personalize the briefing",
"defaultValue": "User",
"placeholder": "Enter your name"
},
{
"name": "focusAreas",
"type": "string",
"required": false,
"label": "Focus Areas",
"description": "What should the briefing cover?",
"defaultValue": "tasks, meetings, priorities",
"placeholder": "e.g., \"tasks, meetings, priorities, insights\""
}
],
"metadata": {
"useCases": ["Morning routine", "Daily planning", "Team updates", "Personal productivity"],
"estimatedCost": "Low",
"requirements": ["Neo4j knowledge graph required", "Scheduled trigger support"]
},
"workflowSummary": {
"nodeCount": 7,
"edgeCount": 8,
"nodeTypes": ["input", "knowledge_query", "merge", "personality", "output"],
"hasTriggers": true
}
}
}Use a template
/api/templates/:id/validateAuthenticatedCheck parameter values before you use them: required parameters that are missing, values of the wrong type, and values outside a parameter's rules are errors; an optional parameter left out is a warning that names its default.
Path Parameters
idstringrequiredThe template ID.
Body Parameters
parametersobjectYour values, by parameter name.
Request
curl -X POST https://api.lvng.ai/api/templates/daily-briefing/validate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "parameters": { "userName": "Sam" } }'Response 200
{
"valid": true,
"errors": [],
"warnings": [
"Optional parameter 'focusAreas' not provided, will use default: tasks, meetings, priorities"
],
"parameters": [
{
"name": "userName",
"type": "string",
"required": false,
"label": "Your Name",
"description": "Personalize the briefing",
"defaultValue": "User",
"placeholder": "Enter your name"
},
{
"name": "focusAreas",
"type": "string",
"required": false,
"label": "Focus Areas",
"description": "What should the briefing cover?",
"defaultValue": "tasks, meetings, priorities",
"placeholder": "e.g., \"tasks, meetings, priorities, insights\""
}
]
}/api/templates/:id/preview-workflowAuthenticatedThe workflow your values make, without saving anything: each {{placeholder}} is replaced by your value or the parameter's default.
Path Parameters
idstringrequiredThe template ID.
Body Parameters
parametersobjectYour values, by parameter name.
Request
curl -X POST https://api.lvng.ai/api/templates/daily-briefing/preview-workflow \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "parameters": { "userName": "Sam", "focusAreas": "tasks, meetings, customer calls" } }'Response 200
{
"workflow": {
"id": "b8c9d0e1-f2a3-4b4c-9d5e-6f7a8b9c0d1e",
"name": "Automated Daily Briefing",
"description": "Generate a personalized daily briefing from your knowledge graph and project data",
"templateId": "daily-briefing",
"parameters": {"userName": "Sam", "focusAreas": "tasks, meetings, customer calls"},
"nodes": [
{
"id": "input-1",
"type": "input",
"position": {"x": 100, "y": 250},
"data": {"label": "Briefing Request"},
"config": {}
},
{
"id": "knowledge-tasks",
"type": "knowledge_query",
"position": {"x": 350, "y": 150},
"data": {"label": "Fetch Tasks"},
"config": {"search": "tasks action items priorities", "limit": 10}
},
{
"id": "knowledge-meetings",
"type": "knowledge_query",
"position": {"x": 350, "y": 250},
"data": {"label": "Fetch Meetings"},
"config": {"search": "meeting notes agenda", "limit": 10}
},
{
"id": "knowledge-insights",
"type": "knowledge_query",
"position": {"x": 350, "y": 350},
"data": {"label": "Recent Insights"},
"config": {"search": "tasks, meetings, customer calls", "limit": 5}
},
{
"id": "merge-1",
"type": "merge",
"position": {"x": 600, "y": 250},
"data": {"label": "Combine Data"},
"config": {"strategy": "object"}
},
{
"id": "personality-1",
"type": "personality",
"position": {"x": 850, "y": 250},
"data": {"label": "Create Briefing"},
"config": {
"personalityId": "lvng",
"prompt": "Create a personalized daily briefing for Sam.\n\nFocus areas: tasks, meetings, customer calls\n\nData: {{input}}\n\nFormat as:\n# Good Morning, Sam! ☀️\n\n## Today's Priorities\n[Top tasks]\n\n## Scheduled Meetings\n[Meetings for today]\n\n## Recent Insights\n[Key insights from yesterday]\n\n## Focus Recommendation\n[One key thing to focus on today]"
}
},
{
"id": "output-1",
"type": "output",
"position": {"x": 1100, "y": 250},
"data": {"label": "Daily Briefing"},
"config": {}
}
],
"edges": [
{"source": "input-1", "target": "knowledge-tasks"},
{"source": "input-1", "target": "knowledge-meetings"},
{"source": "input-1", "target": "knowledge-insights"},
{"source": "knowledge-tasks", "target": "merge-1"},
{"source": "knowledge-meetings", "target": "merge-1"},
{"source": "knowledge-insights", "target": "merge-1"},
{"source": "merge-1", "target": "personality-1"},
{"source": "personality-1", "target": "output-1"}
],
"triggers": [
{"type": "schedule", "schedule": "0 8 * * *", "enabled": true}
],
"created": "2026-03-20T09:30:00.000Z",
"version": 1
},
"parameters": {"userName": "Sam", "focusAreas": "tasks, meetings, customer calls"}
}/api/templates/:id/free-nameAuthenticatedThe name a workflow made from this template would be saved under for you when you give none: the template's name, or the first of '<name> (2)' to '<name> (50)' your organization has not used. 409 WORKFLOW_NAME_NONE_FREE when all are taken.
Path Parameters
idstringrequiredThe template ID.
Request
curl -X GET https://api.lvng.ai/api/templates/daily-briefing/free-name \
-H "Authorization: Bearer YOUR_API_KEY"Response 200
{
"name": "Automated Daily Briefing (2)"
}/api/templates/:id/instantiateAuthenticatedSave the template, with your values, as a workflow of your organization made by you. workflow.id is the saved workflow's ID, the one the Workflows API takes; savedWorkflowId is the same ID, kept for callers that read it. A name your organization already uses answers 409 WORKFLOW_NAME_TAKEN, and nothing is saved.
Path Parameters
idstringrequiredThe template ID.
Body Parameters
parametersobjectYour values, by parameter name.
namestringThe workflow's name, up to 255 characters. With none, the name GET /api/templates/:id/free-name gives.
executebooleanfalsetrue to run it at once: the request then waits for the run (up to 60 minutes) and answers with it in execution. That run is not listed with the workflow's runs; to have it listed, save without execute and start it with POST /api/v2/workflows/:id/execute.
Request
curl -X POST https://api.lvng.ai/api/templates/daily-briefing/instantiate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "parameters": { "userName": "Sam", "focusAreas": "tasks, meetings, customer calls" } }'Response 201
{
"success": true,
"workflow": {
"id": "d0e1f2a3-b4c5-4d6e-9f7a-8b9c0d1e2f3a",
"savedWorkflowId": "d0e1f2a3-b4c5-4d6e-9f7a-8b9c0d1e2f3a",
"customer_id": "8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
"name": "Automated Daily Briefing (2)",
"templateId": "daily-briefing",
"templateName": "Automated Daily Briefing"
},
"execution": null,
"message": "Template instantiated successfully"
}