Syncless

Templates

If you don't know what a project template is, learn more about project template.

List templates

Lists saved project templates in the API key user's active workspace. Use the returned template id and node ids when creating a project from a template.

GET /api/console/v1/templates?index=0&pageSize=50
Authorization: Bearer <api_key>

Response

{
  "templates": [
    {
      "id": "<template_id>",
      "workspaceId": "<workspace_id>",
      "createdByUserId": "<user_id>",
      "name": "Launch checklist",
      "graph": {
        "version": "1.0.0",
        "name": "Launch checklist",
        "description": "A reusable launch checklist workflow.",
        "icon": "planning",
        "background": "#EFF1F5",
        "nodes": [
          {
            "id": "<node_id>",
            "position": { "x": 0, "y": 0 },
            "data": {
              "type": "task",
              "icon": "planning",
              "background": "#EFF1F5",
              "title": "Plan",
              "instructions": "Draft the launch checklist."
            }
          }
        ],
        "edges": []
      },
      "createdAt": "2026-05-17T00:00:00.000Z",
      "updatedAt": "2026-05-17T00:00:00.000Z"
    }
  ]
}

Examples

TypeScript

const BASE_URL = "https://api.syncless.ai"
const API_KEY = "<api_key>"

const response = await fetch(BASE_URL + "/api/console/v1/templates?index=0&pageSize=50", {
  headers: {
    "Authorization": "Bearer " + API_KEY,
  },
})

if (!response.ok) {
  throw new Error(await response.text())
}

console.log(await response.json())

Python

import requests

BASE_URL = "https://api.syncless.ai"
API_KEY = "<api_key>"

response = requests.get(
    BASE_URL + "/api/console/v1/templates?index=0&pageSize=50",
    headers={
        "Authorization": "Bearer " + API_KEY,
    },
)

response.raise_for_status()
print(response.json())

cURL

curl "https://api.syncless.ai/api/console/v1/templates?index=0&pageSize=50" \
  -H "Authorization: Bearer <api_key>"

Create project from template

Creates a project from a template. Each template node must be assigned to an owner by user id.

POST /api/console/v1/templates/<template_id>/projects
Authorization: Bearer <api_key>
Content-Type: application/json

Request body

FieldTypeRequired
namestringyes
nodesobjectyes
{
  "name": "Launch checklist",
  "nodes": {
    "<node_id>": "<owner_id>"
  }
}

Response

{
  "ok": true,
  "pipelineId": "<pipeline_id>",
  "tasks": [],
  "taskDependencies": []
}

Examples

TypeScript

const BASE_URL = "https://api.syncless.ai"
const API_KEY = "<api_key>"
const TEMPLATE_ID = "<template_id>"

const response = await fetch(BASE_URL + "/api/console/v1/templates/" + TEMPLATE_ID + "/projects", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Launch checklist",
    nodes: {
      "<node_id>": "<owner_id>",
    },
  }),
})

if (!response.ok) {
  throw new Error(await response.text())
}

console.log(await response.json())

Python

import json
import requests

BASE_URL = "https://api.syncless.ai"
API_KEY = "<api_key>"
TEMPLATE_ID = "<template_id>"

body = json.dumps({
    "name": "Launch checklist",
    "nodes": {
        "<node_id>": "<owner_id>",
    },
}).encode("utf-8")

response = requests.post(
    BASE_URL + "/api/console/v1/templates/" + TEMPLATE_ID + "/projects",
    data=body,
    headers={
        "Authorization": "Bearer " + API_KEY,
        "Content-Type": "application/json",
    },
)

response.raise_for_status()
print(response.json())

cURL

curl -X POST "https://api.syncless.ai/api/console/v1/templates/<template_id>/projects" \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Launch checklist",
    "nodes": {
      "<node_id>": "<owner_id>"
    }
  }'