How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.
A trigger is how an external signal becomes a workflow run. Once a workflow is deployed, you attach one or more triggers to control when and how it runs. Every inbound signal is validated, deduplicated, and recorded before it becomes a workflow_run dispatched to the execution plane.
Schedule triggers run a workflow on a cron-style cadence — every morning, every hour, every Monday. Schedules are registered with Trigger.dev, which calls back into CelerFlow when each occurrence fires. You can pause and resume a schedule without editing the workflow; changing the cadence itself is done from the workflow’s trigger settings.
A webhook trigger gives a workflow a unique inbound URL that external systems can call when an event happens:
ALL /triggers/webhook/{urlToken}
The URL contains an unguessable token (whk_…).
Requests must carry a valid HMAC-SHA256 signature computed from the raw body and the trigger’s signing secret. Unsigned or mis-signed requests are rejected.
By default only POST is accepted; you can widen the allowed methods.
A replay window (default 300 seconds) and delivery deduplication protect against replayed or duplicated events.
Keep your webhook signing secret and API keys server-side. Rotating a secret invalidates signatures computed with the old one, so update senders when you rotate.
Inbound trigger payloads are injected into the run as a _trigger context. Steps can bind to _trigger.payload.* to use values from the incoming event — for example, the email address or record ID that fired the webhook. Bindings degrade gracefully when a field is absent.
Every inbound webhook or API call is recorded as a delivery (trigger_deliveries) with its payload and outcome. Deliveries power deduplication and let you trace which event produced which run.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CelerFlow","colors":{"primary":"#6366F1","light":"#818CF8","dark":"#4F46E5"},"logo":{"light":"https://mintcdn.com/celerflow/0wc_xDsolMRsQV1N/logo/light.svg?fit=max\u0026auto=format\u0026n=0wc_xDsolMRsQV1N\u0026q=85\u0026s=e5caee198c7a5307fd4a46a3cdb07585","dark":"https://mintcdn.com/celerflow/0wc_xDsolMRsQV1N/logo/dark.svg?fit=max\u0026auto=format\u0026n=0wc_xDsolMRsQV1N\u0026q=85\u0026s=77e19158374428383caf78bef7c963b1"},"favicon":"https://mintcdn.com/celerflow/yc7DDh85x4NJNU9x/favicon.ico?fit=max\u0026auto=format\u0026n=yc7DDh85x4NJNU9x\u0026q=85\u0026s=aebaf1456ddc2ccbfbab909b80ce206e","styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"celerflow","hasAudioNarration":false,"actualSubdomain":"celerflow","customDomains":["docs.celerflow.ai"],"gitSource":{"type":"github","owner":"celerflow","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21dc3329c7042dd5f5ca4b","collectionId":"816cf4a1-464f-448b-8a0d-4497bc540d56","schemaVersion":"v2"},"entitlements":{},"buildId":"6a21dc3329c7042dd5f5ca4b:success","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Core concepts","count":8},{"language":"default","tag":"Integrations","count":6},{"language":"default","tag":"Dashboard guide","count":4},{"language":"default","tag":"Platform","count":3},{"language":"default","tag":"Getting started","count":2},{"language":"default","tag":"API reference","count":1},{"language":"default","tag":"Overview","count":1},{"language":"default","tag":"BioMed research","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"concepts/triggers","slug":"/concepts/triggers","pageMetadata":{"title":"Triggers","description":"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.","href":"/concepts/triggers"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A trigger is how an external signal becomes a workflow run. Once a workflow is deployed, you attach one or more triggers to control when and how it runs. Every inbound signal is validated, deduplicated, and recorded before it becomes a `,_jsx(_components.code,{children:`workflow_run`}),` dispatched to the execution plane.`]}),`\n`,_jsx(Heading,{level:`2`,id:`trigger-types`,children:`Trigger types`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`How it starts`}),_jsx(_components.th,{children:`Auth`}),_jsx(_components.th,{children:`Status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Manual`})}),_jsx(_components.td,{children:`Run or rerun from the workflow detail page`}),_jsx(_components.td,{children:`Your session`}),_jsx(_components.td,{children:`Available`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Schedule`})}),_jsx(_components.td,{children:`A cron schedule runs it automatically`}),_jsx(_components.td,{children:`Internal`}),_jsx(_components.td,{children:`Available`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`API`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`POST`}),` to the workflow’s API trigger endpoint`]}),_jsxs(_components.td,{children:[`Bearer `,_jsx(_components.code,{children:`cfk_`}),` key`]}),_jsx(_components.td,{children:`Available`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Webhook`})}),_jsxs(_components.td,{children:[`An external system `,_jsx(_components.code,{children:`POST`}),`s to a per-workflow URL`]}),_jsx(_components.td,{children:`HMAC-SHA256 signature`}),_jsx(_components.td,{children:`Available`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`External event`})}),_jsx(_components.td,{children:`A connected app emits an event`}),_jsx(_components.td,{children:`—`}),_jsx(_components.td,{children:`Coming soon`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`schedule`,children:`Schedule`}),`\n`,_jsx(_components.p,{children:`Schedule triggers run a workflow on a cron-style cadence — every morning, every hour, every Monday. Schedules are registered with Trigger.dev, which calls back into CelerFlow when each occurrence fires. You can pause and resume a schedule without editing the workflow; changing the cadence itself is done from the workflow’s trigger settings.`}),`\n`,_jsx(Heading,{level:`2`,id:`api-trigger`,children:`API trigger`}),`\n`,_jsx(_components.p,{children:`An API trigger exposes a workflow as an endpoint you can call from your own code:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`POST /triggers/api/{triggerId}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Authorization: Bearer cfk_xxx`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Content-Type: application/json`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`{ \"payload\": { ... } }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Each workflow can have `,_jsx(_components.strong,{children:`one`}),` API trigger.`]}),`\n`,_jsxs(_components.li,{children:[`The key format is `,_jsx(_components.code,{children:`cfk_…`}),`. Treat it like a password — anyone with the key can start runs.`]}),`\n`,_jsxs(_components.li,{children:[`The request body is passed to the workflow as trigger context (see `,_jsx(_components.a,{href:`#binding-trigger-data`,children:`Binding trigger data`}),`).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`webhook-trigger`,children:`Webhook trigger`}),`\n`,_jsx(_components.p,{children:`A webhook trigger gives a workflow a unique inbound URL that external systems can call when an event happens:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ALL /triggers/webhook/{urlToken}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The URL contains an unguessable token (`,_jsx(_components.code,{children:`whk_…`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`Requests must carry a valid `,_jsx(_components.strong,{children:`HMAC-SHA256 signature`}),` computed from the raw body and the trigger’s signing secret. Unsigned or mis-signed requests are rejected.`]}),`\n`,_jsxs(_components.li,{children:[`By default only `,_jsx(_components.code,{children:`POST`}),` is accepted; you can widen the allowed methods.`]}),`\n`,_jsx(_components.li,{children:`A replay window (default 300 seconds) and delivery deduplication protect against replayed or duplicated events.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Keep your webhook signing secret and API keys server-side. Rotating a secret invalidates signatures computed with the old one, so update senders when you rotate.`})}),`\n`,_jsx(Heading,{level:`2`,id:`binding-trigger-data`,children:`Binding trigger data`}),`\n`,_jsxs(_components.p,{children:[`Inbound trigger payloads are injected into the run as a `,_jsx(_components.code,{children:`_trigger`}),` context. Steps can bind to `,_jsx(_components.code,{children:`_trigger.payload.*`}),` to use values from the incoming event — for example, the email address or record ID that fired the webhook. Bindings degrade gracefully when a field is absent.`]}),`\n`,_jsx(Heading,{level:`2`,id:`deliveries`,children:`Deliveries`}),`\n`,_jsxs(_components.p,{children:[`Every inbound webhook or API call is recorded as a `,_jsx(_components.strong,{children:`delivery`}),` (`,_jsx(_components.code,{children:`trigger_deliveries`}),`) with its payload and outcome. Deliveries power deduplication and let you trace which event produced which run.`]}),`\n`,_jsx(Heading,{level:`2`,id:`see-also`,children:`See also`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/concepts/workflows`,children:`Workflows`}),` — how a workflow reaches the `,_jsx(_components.code,{children:`active`}),` state where triggers apply.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/concepts/runs`,children:`Runs \u0026 executions`}),` — what happens after a trigger fires.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Triggers","description":"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.","href":"/concepts/triggers"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Trigger types","slug":"trigger-types","depth":2,"children":[]},{"title":"Schedule","slug":"schedule","depth":2,"children":[]},{"title":"API trigger","slug":"api-trigger","depth":2,"children":[]},{"title":"Webhook trigger","slug":"webhook-trigger","depth":2,"children":[]},{"title":"Binding trigger data","slug":"binding-trigger-data","depth":2,"children":[]},{"title":"Deliveries","slug":"deliveries","depth":2,"children":[]},{"title":"See also","slug":"see-also","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"celerflow","siteName":"CelerFlow","title":"Triggers - CelerFlow","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-01T06:59:23.100Z","originalFileLocation":"concepts/triggers.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.\">\u003cmeta data-mint-head name=\"application-name\" content=\"CelerFlow\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Triggers - CelerFlow\">\u003cmeta data-mint-head property=\"og:description\" content=\"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CelerFlow\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.celerflow.ai/concepts/triggers\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://celerflow.mintlify.app/_mintlify/api/og/v2?division=Core+concepts\u0026amp;title=Triggers\u0026amp;description=How+a+deployed+workflow+starts+%E2%80%94+manually%2C+on+a+schedule%2C+from+a+webhook%2C+or+via+the+API.\u0026amp;theme=aeb9175cf5eb40a4d733e251\u0026amp;signature=766f9ac94ff2fb84c12bdd545ec51f0be7f3c5953aa8977e4aac369ff7ad6d70\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Triggers - CelerFlow\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://celerflow.mintlify.app/_mintlify/api/og/v2?division=Core+concepts\u0026amp;title=Triggers\u0026amp;description=How+a+deployed+workflow+starts+%E2%80%94+manually%2C+on+a+schedule%2C+from+a+webhook%2C+or+via+the+API.\u0026amp;theme=aeb9175cf5eb40a4d733e251\u0026amp;signature=766f9ac94ff2fb84c12bdd545ec51f0be7f3c5953aa8977e4aac369ff7ad6d70\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/celerflow/ybXfvhQIh-yY_S-4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CelerFlow\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6366F1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.celerflow.ai/concepts/triggers\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/concepts/triggers.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.celerflow.ai/#organization\",\"name\":\"CelerFlow\",\"url\":\"https://docs.celerflow.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/celerflow/0wc_xDsolMRsQV1N/logo/light.svg?fit=max\u0026auto=format\u0026n=0wc_xDsolMRsQV1N\u0026q=85\u0026s=e5caee198c7a5307fd4a46a3cdb07585\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.celerflow.ai#website\",\"name\":\"CelerFlow\",\"url\":\"https://docs.celerflow.ai\",\"publisher\":{\"@id\":\"https://docs.celerflow.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.celerflow.ai/concepts/triggers#webpage\",\"url\":\"https://docs.celerflow.ai/concepts/triggers\",\"name\":\"Triggers\",\"description\":\"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.\",\"dateModified\":\"2026-06-01T06:59:23.100Z\",\"isPartOf\":{\"@id\":\"https://docs.celerflow.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.celerflow.ai/concepts/triggers#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.celerflow.ai/concepts/triggers#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Core concepts\",\"item\":\"https://docs.celerflow.ai/concepts/workspaces\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Triggers\",\"item\":\"https://docs.celerflow.ai/concepts/triggers\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.celerflow.ai/concepts/triggers#article\",\"headline\":\"Triggers\",\"name\":\"Triggers\",\"description\":\"How a deployed workflow starts — manually, on a schedule, from a webhook, or via the API.\",\"url\":\"https://docs.celerflow.ai/concepts/triggers\",\"mainEntityOfPage\":{\"@id\":\"https://docs.celerflow.ai/concepts/triggers#webpage\"},\"dateModified\":\"2026-06-01T06:59:23.100Z\",\"publisher\":{\"@id\":\"https://docs.celerflow.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.celerflow.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CelerFlow\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CelerFlow","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Getting started","pages":[{"title":"Introduction","href":""},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Core concepts","pages":[{"title":"Workspaces","href":"/concepts/workspaces"},{"title":"Workflows","href":"/concepts/workflows"},{"title":"Planner","href":"/concepts/planner"},{"title":"Platform agents","description":"The capability pool the Planner assembles into a workflow.","href":"/concepts/platform-agents"},{"title":"Triggers","href":"/concepts/triggers"},{"title":"Connections","description":"Team-scoped app connections — OAuth via Composio plus first-party MCP integrations.","href":"/concepts/connections"},{"title":"Runs \u0026 executions","href":"/concepts/runs"},{"title":"Approvals","href":"/concepts/approvals"}]},{"group":"BioMed research","pages":[{"title":"BioMed research pack","href":"/concepts/biomed"}]},{"group":"Integrations","pages":[{"title":"Gmail","href":"/integration/gmail"},{"title":"Notion","href":"/integration/notion"},{"title":"Slack","href":"/integration/slack"},{"title":"HubSpot","href":"/integration/hubspot"},{"title":"Attio","href":"/integration/attio"},{"title":"Firecrawl","href":"/integration/firecrawl"}]},{"group":"Dashboard guide","pages":[{"title":"Building a workflow","href":"/dashboard/building-a-workflow"},{"title":"Executions","href":"/dashboard/executions"},{"title":"Browser extension","href":"/dashboard/browser-extension"},{"title":"Settings","href":"/dashboard/settings"}]},{"group":"Platform","pages":[{"title":"Billing \u0026 usage","href":"/platform/billing"},{"title":"Teams \u0026 roles","href":"/platform/teams-rbac"},{"title":"Roadmap","href":"/platform/roadmap"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"title":"Triggers - CelerFlow","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}