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

GET/api/templatesAuthenticated

The templates offered, without their workflow definitions.

Query Parameters

categorystring

Only templates of this category.

difficultystring

Only templates of this difficulty: beginner, intermediate or advanced.

searchstring

Match the name, description and tags. When it is given, category and difficulty are not applied.

limitinteger
Default: 50

How many templates to return.

offsetinteger
Default: 0

Pagination offset.

Request

cURL
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

idstring

The template ID, used in every route below.

namestring

Its name; a workflow made from it is saved under this name unless you give one.

categorystring

Its category (see GET /api/templates/categories).

descriptionstring

What it does.

difficultystring

beginner, intermediate or advanced.

estimatedTimestring

About how long a run takes.

iconstring

An icon for it.

authorstring

Who made it.

versionstring

Its version.

tagsstring[]

Words it is found by.

parameterCountinteger

How many parameters it takes (GET /api/templates/:id/preview lists them).

metadataobject

Use cases, estimated cost and requirements.

GET/api/templates/categoriesAuthenticated

The categories of the templates offered, with how many each has.

Request

cURL
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
}
GET/api/templates/:idAuthenticated

One 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

idstringrequired

The template ID.

Request

cURL
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"]
    }
  }
}
GET/api/templates/:id/previewAuthenticated

One 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

idstringrequired

The template ID.

Request

cURL
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

POST/api/templates/:id/validateAuthenticated

Check 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

idstringrequired

The template ID.

Body Parameters

parametersobject

Your values, by parameter name.

Request

cURL
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\""
    }
  ]
}
POST/api/templates/:id/preview-workflowAuthenticated

The workflow your values make, without saving anything: each {{placeholder}} is replaced by your value or the parameter's default.

Path Parameters

idstringrequired

The template ID.

Body Parameters

parametersobject

Your values, by parameter name.

Request

cURL
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"}
}
GET/api/templates/:id/free-nameAuthenticated

The 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

idstringrequired

The template ID.

Request

cURL
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)"
}
POST/api/templates/:id/instantiateAuthenticated

Save 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

idstringrequired

The template ID.

Body Parameters

parametersobject

Your values, by parameter name.

namestring

The workflow's name, up to 255 characters. With none, the name GET /api/templates/:id/free-name gives.

executeboolean
Default: false

true 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
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"
}