Workflow Templates & Marketplace
Pre-built Workflow recipes. Two distinct surfaces:
- Templates — first-party templates curated and shipped by CronDB. Some are free; others are bundled with paid plans or sold individually. Discoverable via
GET /v1/workflows/templates. - Marketplace — community-published workflows. Any user can publish; everyone else can browse, install, rate. Discoverable via
GET /v1/workflows/marketplace.
Plus version history on every workflow you own — every save snapshots, and rollback is one POST.
First-Party Templates
List templates
GET /v1/workflows/templates?detail=summary
detail=summary (default) drops the marketing copy from each row (~37% smaller payload). Use for grid views. Pass detail=full to include the marketplace_detail body — story, use cases, step explanations — for the detail page.
Response
{
"templates": [
{
"id": "ind_saas_intent_alert_to_slack",
"name": "SaaS intent alerts → Slack",
"description": "When a SaaS intent alert fires, post the top 5 to your Slack #sales-leads channel.",
"tag": "beginner",
"trigger_type": "intent_alert",
"actions": [
{"type": "filter_domains", "config": {"limit": 5}},
{"type": "http_request", "config": {"method": "POST", "url": "{{slack_webhook_url}}", "body": {"text": "..."}}}
],
"price_cents": 0,
"price_display": "Free",
"is_free": true,
"owned": true,
"industries": ["saas"]
}
]
}
Response Fields
| Field | Description |
|---|---|
id | Stable template ID. Used for install + rate. |
tag | beginner, intermediate, advanced — drives default pricing. |
price_cents / price_display | Per-template pricing. Free templates have price_cents: 0. |
is_free | Free for any signed-in user. |
owned | Already accessible to the caller — either bought, plan-perk, or is_free. Filter by this for "my templates" view. |
industries | Auto-derived from the template's id prefix (ind_saas_* → saas) and any industry condition value. Empty for general-purpose templates. |
Install a template
POST /v1/workflows/install-template
{ "template_id": "ind_saas_intent_alert_to_slack" }
The endpoint creates a fresh workflow on the caller's account from the template's trigger + conditions + actions. Returns the new workflow object. Paid templates require a prior purchase (returns 402 if not owned).
Template stats (public)
GET /v1/workflows/template-stats
Public — no auth. Returns install counts and average ratings for every official template:
{
"install_counts": {
"ind_saas_intent_alert_to_slack": 1247,
"ind_fintech_funding_to_sequence": 412
},
"ratings": {
"ind_saas_intent_alert_to_slack": { "avg": 4.6, "count": 89 }
}
}
Use this to badge templates with social proof.
Rate a template
POST /v1/workflows/rate-template
{ "template_id": "ind_saas_intent_alert_to_slack", "template_type": "workflow", "rating": 5, "review": "..." }
Must have installed (or purchased) the template — returns 403 otherwise. Rating overwrites any prior rating from the same user.
My ratings
GET /v1/workflows/my-ratings
Lookup the caller's submitted ratings — useful for marking up the templates list with "you rated this 5★ on Apr 12."
Suggestions
GET /v1/workflows/suggest-templates
Returns templates the engine thinks the caller would benefit from, based on which industries they search for, what their saved alerts target, and which templates similar accounts use. Rough collaborative-filtering signal — quality improves with more user activity.
Community Marketplace
User-published workflows. Anyone can publish; anyone can install.
Browse
GET /v1/workflows/marketplace?category=outbound&difficulty=intermediate&sort=popular&page=1&limit=20&q=slack
| Query Param | Description |
|---|---|
category | outbound, enrichment, monitoring, notifications, data-cleanup, etc. |
difficulty | beginner, intermediate, advanced. |
sort | popular (install count), newest (created_at), top_rated (rating sum). |
page / limit | Pagination. limit 1-50, default 20. |
q | Substring search on name + description. |
Response
{
"items": [
{
"id": 41,
"name": "Drip-feed warm domains into HubSpot",
"description": "When a tracked-keyword match fires...",
"category": "enrichment",
"tags": ["hubspot", "enrichment"],
"difficulty": "intermediate",
"trigger_type": "tracked_keyword_match",
"actions": [/* full action graph */],
"user_id": 18,
"author_handle": "@sarahg",
"install_count": 142,
"rating_sum": 32,
"rating_count": 8,
"average_rating": 4.0,
"is_public": true,
"created_at": "2026-04-08T10:00:00Z"
}
],
"total": 87,
"page": 1,
"pages": 5
}
Get one entry
GET /v1/workflows/marketplace/{marketplace_id}
Install
POST /v1/workflows/marketplace/{marketplace_id}/install
Creates a new workflow on the caller's account, paused by default (start paused so the caller can configure secrets / connection IDs / Slack webhooks before going live). Increments the marketplace entry's install_count. Counts against the caller's plan-tier workflow quota.
Rate
POST /v1/workflows/marketplace/{marketplace_id}/rate
{ "rating": 5, "review": "Worked out of the box." }
1-5 stars. Re-rating overwrites the prior rating and adjusts rating_sum accordingly.
Publish your own
POST /v1/workflows/{workflow_id}/publish
Publish a workflow you own to the marketplace.
| Body Field | Description |
|---|---|
name | Display name in the marketplace. Must be unique per author. |
description | Defaults to the workflow's own description. |
category | Pick from the list above. |
tags | Free-form array (used for search). |
difficulty | beginner / intermediate / advanced. |
Returns 400 if you've already published an entry with the same name. To remove an entry: DELETE /v1/workflows/marketplace/{id}.
Versioning
Every PUT /v1/workflows/{id} snapshots the previous state. Use these endpoints to inspect or roll back.
List versions
GET /v1/workflows/{workflow_id}/versions
{
"versions": [
{"id": 88, "version_number": 12, "change_summary": "Updated actions", "created_at": "2026-05-04T08:22:18Z"},
{"id": 87, "version_number": 11, "change_summary": "Updated trigger, conditions", "created_at": "2026-05-03T11:00:00Z"}
]
}
Last 50 versions returned, newest first. The change_summary is auto-generated from which fields the diff touched.
Get a snapshot
GET /v1/workflows/{workflow_id}/versions/{version_id}
Returns the full snapshot — name, description, trigger_type, trigger_config, conditions, actions, execution_limits, is_active — exactly as the workflow looked at that version.
Rollback
POST /v1/workflows/{workflow_id}/versions/{version_id}/rollback
Restores the workflow to that version's state. Creates a new version row labelled "Rolled back to vN" so the rollback itself is auditable. Returns the workflow in its restored state.
Workflow Analytics
Cross-workflow analytics for the caller's account: total runs, success rate, daily breakdown, top workflows by execution volume, per-action-type success rates.
Endpoint
GET /v1/workflows/analytics?days=30
days accepts 1-90, default 30.
Response
{
"total_workflows": 12,
"active_workflows": 8,
"total_runs": 1842,
"runs_by_status": { "success": 1701, "error": 102, "partial": 39 },
"runs_by_day": [
{"date": "2026-04-06", "count": 41},
{"date": "2026-04-07", "count": 58}
],
"top_workflows": [
{"id": 17, "name": "Hot fintech to Slack", "runs": 412, "is_active": true}
],
"action_success_rates": {
"http_request": {"total": 1604, "success": 1572, "error": 32, "success_rate": 98.0},
"enroll_in_sequence": {"total": 198, "success": 196, "error": 2, "success_rate": 99.0},
"ai_extract": {"total": 412, "success": 401, "error": 11, "success_rate": 97.3}
},
"avg_duration_seconds": 4.8
}
action_success_rates is the most actionable field — sort descending by error rate to find which action types are flaking. Spike in http_request errors? Probably an external endpoint changed. Spike in ai_extract errors? Probably your BYOK key has rate-limit issues.
Notes
- Templates
idstrings are stable — store them, not the human-readable name. Names occasionally change for clarity. - Marketplace publishing is open by default; spam moderation happens out of band. If you find an entry that looks like spam, contact
support@crondb.comwith the marketplace ID. - Marketplace installs always start paused. The reason: most templates expect you to wire up a Slack webhook URL or connection ID before they'd actually work. Better to start paused than fire a half-configured run.
- Version snapshots only capture the workflow definition, not the execution history. Rolling back doesn't undo past runs.
Next Steps
- Workflows — Core workflow CRUD, runs, approvals, and the action reference.
- Workflow Builder — Dashboard walkthrough.