ResourcesTurboFlow

TurboFlow

Create, publish, trigger, and test visual workflows through the Talkturo API — manage flow integrations, secrets, and AI-assisted flow building with sync and async execution modes.

{
  "flows": [
    {
      "id": "flow_72c9f2ab",
      "name": "Inbound booking qualification",
      "status": "draft"
    },
    {
      "id": "flow_a11c38de",
      "name": "Lead routing",
      "status": "published"
    }
  ]
}
{
  "name": "Inbound booking qualification"
}
{
  "id": "flow_72c9f2ab",
  "name": "Inbound booking qualification",
  "status": "draft"
}
BODY='{"params":{"caller_name":"Jane Chen","booking_id":"bk_9d31a8f4","priority":"high"},"context":{"assistant_id":"asst_4f0c8b21"}}'
SECRET='tfsec_example_1k9n3d7s4h2m8q'
SIGNATURE=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex | sed 's/^.* //')

curl -i -X POST "https://app.talkturo.com/api/flow/flow_72c9f2ab/trigger" \
  -H "Content-Type: application/json" \
  -H "X-Talkturo-Secret: $SIGNATURE" \
  -d "$BODY"
{
  "ok": true,
  "run_id": "3cc7b81c-4f11-4f20-a7d3-6181a93f4b65"
}
BODY='{"params":{"caller_name":"Jane Chen","booking_id":"bk_9d31a8f4","priority":"high"},"context":{"assistant_id":"asst_4f0c8b21"}}'
SECRET='tfsec_example_1k9n3d7s4h2m8q'
SIGNATURE=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex | sed 's/^.* //')

curl -i -X POST "https://app.talkturo.com/api/flow/flow_72c9f2ab/trigger?sync=true" \
  -H "Content-Type: application/json" \
  -H "X-Talkturo-Secret: $SIGNATURE" \
  -d "$BODY"
{
  "ok": true,
  "run_id": "3cc7b81c-4f11-4f20-a7d3-6181a93f4b65",
  "output": {
    "qualification": "accepted",
    "scheduled_callback": true,
    "assigned_queue": "priority-bookings"
  }
}

TurboFlow endpoints

TurboFlow lets you create visual workflows, publish immutable versions, and trigger published flows from your app or voice assistant. Most endpoints use session cookie authentication from the Talkturo app, while the trigger endpoint uses HMAC authentication so external systems can invoke a published flow securely.

POST /api/flow/{flowId}/trigger does not use session auth. Sign the raw request body with SHA-256 HMAC using the published flow version's trigger_secret, then send the digest in the X-Talkturo-Secret header.

Use async mode for production workloads that may run longer than a few seconds. Add ?sync=true only when you need the final output inline and the flow can complete within about 30 seconds.

Endpoint summary

MethodPathAuthPurpose
GET/api/flowSession cookieList flows
POST/api/flowSession cookieCreate a flow
GET/api/flow/manifestSession cookieGet connector manifest
GET/api/flow/{flowId}Session cookieGet a flow
PATCH/api/flow/{flowId}Session cookieUpdate a flow
DELETE/api/flow/{flowId}Session cookieArchive a flow
POST/api/flow/{flowId}/publishSession cookiePublish a new flow version
GET/api/flow/{flowId}/runsSession cookieList flow runs
POST/api/flow/{flowId}/test-runSession cookieRun a flow in test mode
POST/api/flow/{flowId}/test-run/nodeSession cookieRun a single node in test mode
GET/api/flow/{flowId}/tool-schemaSession cookieGet tool schema for a flow
POST/api/flow/{flowId}/triggerHMACTrigger a published flow
GET/api/flow/{flowId}/webhook-testSession cookieGet webhook test details
POST/api/flow/{flowId}/webhook-testSession cookieSend a webhook test
GET/api/flow/integrationsSession cookieList integrations
POST/api/flow/integrationsSession cookieConnect an integration
DELETE/api/flow/integrationsSession cookieDisconnect an integration
GET/api/flow/integrations/{integrationId}Session cookieGet an integration
DELETE/api/flow/integrations/{integrationId}Session cookieDelete an integration
GET/api/flow/integrations/{integrationId}/optionsSession cookieGet dynamic integration options
POST/api/flow/integrations/oauth/authorizeSession cookieStart OAuth authorization
GET/api/flow/integrations/oauth/callbackOAuth state cookieComplete OAuth authorization
POST/api/flow/integrations/webhooks/{provider}HMACReceive provider webhooks
GET/api/flow/integrations/webhooks/metaMeta verificationVerify Meta webhook
POST/api/flow/integrations/webhooks/metaHMACReceive Meta lead events
GET/api/flow/secretsSession cookieList secrets
POST/api/flow/secretsSession cookieCreate a secret
DELETE/api/flow/secretsSession cookieDelete a secret
GET/api/flow/secrets/{secretId}Session cookieGet a secret
DELETE/api/flow/secrets/{secretId}Session cookieDelete a secret by ID
GET/api/flow/secrets/providersSession cookieList secret providers
GET/api/flow/toolsSession cookieList tools and connectors
GET/api/flow/ai/robertSession cookieOpen AI builder stream
POST/api/flow/ai/robertSession cookieSend AI builder request
POST/api/flow/ai/robert-batchSession cookieSend batch AI builder request
POST/api/flow/ai/describe-parameterSession cookieGenerate a parameter description
POST/api/flow/ai/describe-toolSession cookieGenerate a tool description

Authentication

Most TurboFlow endpoints are designed for in-product flow management. Call them from a browser session authenticated to Talkturo, or from a backend that can forward a valid session cookie.

Session-authenticated endpoints

Use session auth for:

  • Flow CRUD
  • Publishing
  • Test runs
  • Run history
  • Integrations
  • Secrets
  • Manifest and tools
  • AI builder endpoints

If your request is not associated with a valid Talkturo session, these endpoints fail before business logic runs.

HMAC-authenticated trigger endpoint

Use HMAC auth for POST /api/flow/{flowId}/trigger. This endpoint is meant for external callers and published runtime execution.

To build the signature:

Serialize the exact request body

Create the JSON request body exactly as it will be sent over the wire. The signature must use the raw body bytes, not a re-serialized object.

Compute the SHA-256 HMAC digest

Use the published flow version's trigger_secret as the HMAC key and the raw request body as the message.

Send the digest in the header

Add the computed digest to the X-Talkturo-Secret header, then send the request to /api/flow/{flowId}/trigger.

import crypto from "crypto";

const flowId = "flow_72c9f2ab";
const triggerSecret = "tfsec_example_1k9n3d7s4h2m8q";
const body = JSON.stringify({
  params: {
    caller_name: "Jane Chen",
    booking_id: "bk_9d31a8f4",
    priority: "high"
  },
  context: {
    assistant_id: "asst_4f0c8b21"
  }
});

const signature = crypto
  .createHmac("sha256", triggerSecret)
  .update(body)
  .digest("hex");

const response = await fetch(
  `https://app.talkturo.com/api/flow/${flowId}/trigger?sync=true`,
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-Talkturo-Secret": signature
    },
    body
  }
);

const data = await response.json();
console.log(response.status, data);

Create and manage flows

Use these endpoints to create draft flows, retrieve existing definitions, update them, and archive them when they are no longer needed.

List flows

GET /api/flow

Returns the flows available in the current authenticated session context.

Create a flow

POST /api/flow

Creates a new draft flow.

Get, update, or archive a flow

GET /api/flow/{flowId} retrieves the current flow definition. PATCH /api/flow/{flowId} updates the draft. DELETE /api/flow/{flowId} archives the flow.

Path parameters

path
flowIdstring
Required

Unique identifier of the flow.

Update behavior

Use PATCH /api/flow/{flowId} to modify draft metadata or structure. Publishing creates a runnable version; updating the draft does not affect already published versions until you publish again.

Archive behavior

Use DELETE /api/flow/{flowId} to archive a flow. Treat this as a management operation, not a runtime stop mechanism for previously completed runs.

Publish a flow

POST /api/flow/{flowId}/publish

Publishing creates a new runnable version of the flow. Trigger requests execute against a published version, not against an unpublished draft.

Path parameters

path
flowIdstring
Required

Identifier of the flow to publish.

What publishing changes

  • Creates a versioned runtime snapshot
  • Makes the flow triggerable through the trigger endpoint
  • Associates runtime execution with the published version
  • Enables HMAC-based external invocation through the version's trigger_secret

If you update a flow after publishing, publish again before expecting trigger calls to use the new logic.

Trigger a published flow

POST /api/flow/{flowId}/trigger

This is the runtime entry point for TurboFlow. It executes a published flow with caller-supplied parameters and optional execution context.

Query parameters

query
syncboolean

Set to true to wait for the flow result inline. If omitted, the endpoint returns immediately with a run_id and processes the flow asynchronously.

Headers

header
X-Talkturo-Secretstring
Required

SHA-256 HMAC digest of the raw request body using the published flow version's trigger_secret.

header
Content-Typestring
Required

Set to application/json.

Request body

body
paramsobject
Required

Key-value input passed into the flow at runtime. The accepted keys depend on the flow design and any trigger or tool schema associated with the flow.

body
contextobject

Optional runtime context object.

assistant_idstring

Optional assistant identifier inside context. Use it when the flow run should be associated with a specific assistant context.

Async trigger example

Async mode returns immediately with a run identifier. Use it when the caller can poll or observe results later.

Async response fields

okboolean
Required

Returns true when the trigger request is accepted for execution.

run_idstring
Required

Unique identifier for the created flow run.

Sync trigger example

Sync mode waits up to about 30 seconds for the flow to complete and returns the final output inline.

Sync response fields

okboolean
Required

Indicates whether the flow completed successfully in sync mode.

run_idstring
Required

Unique identifier for the flow run.

outputobject

Final flow output when the run completes successfully within the sync wait window.

errorstring

Top-level execution error when sync execution fails.

failed_nodestring

Identifier of the node that failed during execution.

partial_outputobject

Any output produced before the failure occurred.

Choose sync or async

Async mode is the safer default for production callers. The API returns 202 with a run_id, which avoids tying your caller's timeout budget to flow runtime.

Use async mode when:

  • The flow may call external systems
  • The caller can continue without the final result
  • You expect retries, batching, or queue-based orchestration

Test a flow before publishing

TurboFlow includes test endpoints for validating draft behavior without going through the published trigger path.

Run the whole flow in test mode

POST /api/flow/{flowId}/test-run

Runs the flow in test mode. Use this while building a draft or validating changes before publishing.

Path parameters

path
flowIdstring
Required

Identifier of the flow to test.

Run a single node in test mode

POST /api/flow/{flowId}/test-run/node

Runs one node in isolation. Use it to debug tool configuration, input mapping, or branch logic without executing the entire graph.

Path parameters

path
flowIdstring
Required

Identifier of the flow that contains the node.

Use test-run endpoints during flow development. Use the trigger endpoint only after publishing when you want runtime behavior that matches external production callers.

Inspect run history

GET /api/flow/{flowId}/runs

Returns historical executions for a flow. Use run history to audit production triggers, inspect failures, and correlate external events with TurboFlow execution.

Path parameters

path
flowIdstring
Required

Identifier of the flow whose runs you want to inspect.

What run history is for

  • Verifying that async trigger requests were accepted and executed
  • Investigating failed runs after sync or async execution
  • Reviewing runtime behavior for a published flow version
  • Correlating a run_id from the trigger response with stored execution records

Manifest and tools

These endpoints help you discover what TurboFlow can connect to and how a specific flow exposes tool behavior.

Get connector manifest

GET /api/flow/manifest

Returns the connector manifest used by the workflow builder. Use it to inspect available integration capabilities and tool definitions exposed by the platform.

List available tools

GET /api/flow/tools

Returns the connectors and tools available to the current account and environment.

Get a flow tool schema

GET /api/flow/{flowId}/tool-schema

Returns tool schema information for a specific flow.

path
flowIdstring
Required

Identifier of the flow whose tool schema you want to retrieve.

Manage integrations

TurboFlow integrations let flows connect to external providers and retrieve provider-specific configuration options.

Integration endpoints

  • GET /api/flow/integrations
  • POST /api/flow/integrations
  • DELETE /api/flow/integrations
  • GET /api/flow/integrations/{integrationId}
  • DELETE /api/flow/integrations/{integrationId}
  • GET /api/flow/integrations/{integrationId}/options

OAuth flow

Use the OAuth endpoints when an integration requires delegated access.

Start authorization

Send POST /api/flow/integrations/oauth/authorize with the provider, a label, and the account slug.

body
providerstring
Required

Integration provider identifier.

body
labelstring
Required

Human-readable label for the connection.

body
account_slugstring
Required

Account slug that owns the integration.

Complete the provider consent flow

The authorization endpoint generates a random OAuth state, stores a SHA-256 hash of that state with request context in httpOnly cookies, and redirects into the provider's consent screen.

Handle the callback

The provider returns to GET /api/flow/integrations/oauth/callback, where Talkturo validates the state cookie and exchanges the authorization code for tokens.

Provider webhooks

TurboFlow also exposes inbound webhook handlers for supported providers.

  • POST /api/flow/integrations/webhooks/{provider} receives provider webhook deliveries for supported integrations such as Cal.com, Calendly, and Slack.
  • GET /api/flow/integrations/webhooks/meta handles verification for Meta webhook setup.
  • POST /api/flow/integrations/webhooks/meta receives Meta lead ads webhook events.

Manage secrets

Secrets store encrypted credentials and provider configuration used by flows and integrations.

Secret endpoints

  • GET /api/flow/secrets
  • POST /api/flow/secrets
  • DELETE /api/flow/secrets
  • GET /api/flow/secrets/{secretId}
  • DELETE /api/flow/secrets/{secretId}
  • GET /api/flow/secrets/providers

Path parameters

path
secretIdstring
Required

Identifier of the secret for detail or delete operations.

Secret providers

GET /api/flow/secrets/providers lists the available secret providers that TurboFlow can use for encrypted secret storage and connection management.

Use the AI builder endpoints

The AI builder endpoints help generate or refine flow definitions from natural-language instructions.

Streaming builder endpoint

GET /api/flow/ai/robert and POST /api/flow/ai/robert

Use these endpoints for AI-assisted flow building with streaming behavior. The route supports both GET and POST.

  • POST /api/flow/ai/robert-batch for batch AI flow building
  • POST /api/flow/ai/describe-parameter to generate a flow parameter description
  • POST /api/flow/ai/describe-tool to generate a tool description

Common workflow

This sequence shows how the main lifecycle fits together from draft creation to external execution.