GET /v1/templates/recommended
Get personalized template recommendations based on user's tag interests
GET
/v1/templates/recommended
Get personalized template recommendations based on user's tag interests
Query Parameters
category
string
required
query
Template category: 'promoted', 'public', 'org', 'all'
limit
integer
optional
query
Maximum number of templates to return (default: 20, max: 100)
strategy
string
optional
query
Recommendation strategy: 'strong_match', 'interest_based' (default), 'popular_with_interest'
Responses
200
OK
application/jsoncode
integer
data
object[]
Array of:
archived
boolean
category
string
Deprecated: Use Tags instead
cooldownMs
integer
createdAt
string
createdBy
string
definition
object
Definition is the full workflow graph to execute. Must contain a
"root" node with type "manual". All action nodes referenced in
children arrays must be present.
blockExpansions
object
Set on run snapshots only (not workflow DB)
inputSchema
object[]
Array of:
description
string
key
string
required
boolean
type
string
"string", "number", "boolean", "object", "array"
nodes
object
REQUIRED
sensitivePropKeys
string[]
Legacy: kept for old runs; no longer populated for new workflows
Array of:
description
string
forkCount
integer
id
string
isPromoted
boolean
maxRuns
integer
name
string
organizationDescription
string
organizationId
string
Fields for user-generated templates (nil for built-in templates)
organizationName
string
organizationPhoto
string
promotedAt
string
promotedBy
string
promotedOrder
integer
slug
string
sourceWorkflowId
string
Source workflow link (nil for built-in or legacy templates)
tableSchemas
object
tags
object[]
Array of:
categories
string[]
e.g., ["blockchain", "finance"]
Array of:
count
integer
Scope-dependent: template, action, trigger, or connector count
createdAt
string
description
string
id
string
imageUrl
string
name
string
promotedTemplateCount
integer
publicTemplateCount
integer
slug
string
updatedAt
string
weight
integer
Higher weight = more prominent
templateProps
object[]
Array of:
default
unknown
description
string
key
string
name
string
properties
object
allowWalletPicker
boolean
AllowWalletPicker controls the org-wallet picker on inputType="address"
fields. When false, the frontend hides the inline "Wallets" badge and
the org-wallet autocomplete popover. Use for third-party address fields
(e.g. a deployer filter) where suggesting org wallets is misleading.
Pointer so explicit false survives JSON round-trip (default true on FE).
allowedChannels
string[]
AllowedChannels constrains the notification-channel picker
(inputType: "notification-channel") to a subset of channels. Used by
templates whose downstream nodes only work with one channel type
(e.g. ["slack"] for a Slack-only approval flow). Frontend ignores
unknown keys; a length-1 list auto-selects in the picker.
Array of:
...
chainId
integer
For tokenAmount: hardcoded chain ID
chainPropKey
string
For tokenSelector/tokenAmount: prop key providing chainId
columns
object[]
Columns describes a csvTable prop (inputType: "csvTable"). The stored
value is an object-of-columnar-arrays: {colKey: []value}. Payload
templates reference each column via {{$props.<propKey>.<colKey>}}.
Array of:
...
enum
unknown[]
Array of:
...
enumLabels
string[]
Array of:
...
excludeNative
boolean
For tokenSelector/multiTokenSelector: hide native tokens (field only accepts ERC-20 contract addresses)
groupKey
string
Groups related props for unified UI rendering
inputType
string
InputType is a UI rendering hint. The frontend uses it to pick a rich
selector component instead of a plain text input. Unknown values are
silently ignored (falls back to default input).
Valid values: chainSelector, tokenSelector, tokenAmount, address,
recipientAddress, email, telegram-chat, slack-channel, textarea,
password, polymarketUser, csvTable, notification-channel
maxRows
integer
csvTable: maximum allowed rows (0 = no cap)
maximum
number
minRows
integer
csvTable: minimum required rows (0 = default 1)
minimum
number
pattern
string
placeholder
string
showWalletBalances
boolean
For tokenSelector: show wallet balances (useful for "sell" tokens)
sources
object[]
Sources lists the workflow node fields this prop was created from.
Each entry identifies a node + field path so the frontend can
reliably match props back to their source fields on reload.
Multiple entries indicate the prop was merged from fields with
identical values across different nodes.
Array of:
...
summary
object
Summary drives the csvTable footer summary. Nil means no summary is
rendered. See PropSchemaSummary for details.
aggregates
object[]
Aggregates declared in display order, left-to-right.
...
position
string
Position in the grid. "footer" (default) renders inline under the
table. "none" suppresses even when aggregates are declared — use to
disable inherited summaries. Other values reserved.
tokenAddress
string
For tokenAmount: hardcoded token address
tokenAddressPropKey
string
For tokenAmount: prop key providing tokenAddress
visibleWhen
object
VisibleWhen controls conditional visibility: show this prop only when
the referenced prop has the specified value.
propKey
string
value
unknown
required
boolean
sensitive
boolean
type
string
"string", "number", "integer", "boolean", "object" (for csvTable)
uiMetadata
object
comments
object[]
Array of:
createdAt
string
createdBy
object
clientId
string
name
string
id
string
nodeId
string
position
object
x
number
y
number
replies
object[]
Array of:
...
resolved
boolean
text
string
updatedAt
string
nodePositions
object
stickyNotes
object[]
Array of:
color
string
createdAt
string
createdBy
object
clientId
string
name
string
id
string
position
object
x
number
y
number
size
object
height
number
width
number
text
string
updatedAt
string
zIndex
integer
updatedAt
string
updatedBy
string
version
integer
visibility
string
Enum:
org, public, org, publicmessage
string
requestId
string
400
Bad Request
401
Unauthorized
500
Internal Server Error
curl -X GET 'https://api.example.com/v1/templates/recommended?category=string' \ -H 'Authorization: Bearer YOUR_API_TOKEN'
const response = await fetch('https://api.example.com/v1/templates/recommended?category=string', { method: 'GET', headers: { "Authorization": "Bearer YOUR_API_TOKEN" }});const data = await response.json();console.log(data);
import requestsheaders = { 'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.get('https://api.example.com/v1/templates/recommended?category=string', headers=headers)print(response.json())
package mainimport ( "fmt" "io" "net/http")func main() { req, _ := http.NewRequest("GET", "https://api.example.com/v1/templates/recommended?category=string", nil) req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN") resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() result, _ := io.ReadAll(resp.Body) fmt.Println(string(result))}
200
Response
{ "code": 200, "data": [ { "archived": true, "category": "<string>", "cooldownMs": 123, "createdAt": "<string>", "createdBy": "<string>", "definition": { "blockExpansions": "<object>", "inputSchema": [ { "description": {}, "key": {}, "required": {}, "type": {} } ], "nodes": "<object>", "sensitivePropKeys": [ "<string>" ] }, "description": "<string>", "forkCount": 123, "id": "<string>", "isPromoted": true, "maxRuns": 123, "name": "<string>", "organizationDescription": "<string>", "organizationId": "<string>", "organizationName": "<string>", "organizationPhoto": "<string>", "promotedAt": "<string>", "promotedBy": "<string>", "promotedOrder": 123, "slug": "<string>", "sourceWorkflowId": "<string>", "tableSchemas": "<object>", "tags": [ { "categories": [ {} ], "count": 123, "createdAt": "<string>", "description": "<string>", "id": "<string>", "imageUrl": "<string>", "name": "<string>", "promotedTemplateCount": 123, "publicTemplateCount": 123, "slug": "<string>", "updatedAt": "<string>", "weight": 123 } ], "templateProps": [ { "default": "<unknown>", "description": "<string>", "key": "<string>", "name": "<string>", "properties": { "allowWalletPicker": {}, "allowedChannels": {}, "chainId": {}, "chainPropKey": {}, "columns": {}, "enum": {}, "enumLabels": {}, "excludeNative": {}, "groupKey": {}, "inputType": {}, "maxRows": {}, "maximum": {}, "minRows": {}, "minimum": {}, "pattern": {}, "placeholder": {}, "showWalletBalances": {}, "sources": {}, "summary": {}, "tokenAddress": {}, "tokenAddressPropKey": {}, "visibleWhen": {} }, "required": true, "sensitive": true, "type": "<string>" } ], "uiMetadata": { "comments": [ { "createdAt": {}, "createdBy": {}, "id": {}, "nodeId": {}, "position": {}, "replies": {}, "resolved": {}, "text": {}, "updatedAt": {} } ], "nodePositions": "<object>", "stickyNotes": [ { "color": {}, "createdAt": {}, "createdBy": {}, "id": {}, "position": {}, "size": {}, "text": {}, "updatedAt": {}, "zIndex": {} } ] }, "updatedAt": "<string>", "updatedBy": "<string>", "version": 123, "visibility": "org" } ], "message": "success", "requestId": "req_abc123"}
API Playground
Try this endpoint
GET
/v1/templates/recommended
