Skip to main content

build-cloud-flow

dci build-cloud-flow [body]

Creates a new CloudFlow and generates its nodes and connections based on the provided natural language intent. The operation streams incremental build events, including the ID of the newly created flow, as they are produced.

Pass the request body as name: value arguments or pipe JSON on stdin — see Command structure.

CLI result shape

The API answers with a text/event-stream of build events. The CLI parses that stream into one result: flowId (the created flow), conversationId (pass it to dci refine-cloud-flow to continue the same builder conversation), the builder's answer, and the build steps that ran. If the stream is not recognized, the raw text is printed unchanged.

Getting a usable first draft
  • Specify every slot up front — trigger, source, destination names, field mapping. A fully specified prompt builds in one shot; an underspecified one costs a clarification round (answer it with refine-cloud-flow and the same conversationId) and tends to drift.
  • Pass free text on stdin. Restish shorthand treats commas structurally, so a question containing commas must be sent as JSON: dci build-cloud-flow < build.json.
  • Inspect before trusting. The flow lands as a draft in your own tenant. Run dci export-cloudflow-flow <flow-id> to review the nodes, then dci test-run-cloudflow-flow <flow-id> --dry-run to validate — builder-generated code nodes in particular often need repair via export → edit → import.
  • dci build-cloudflow is accepted as an alias.

Examples

# Build a new draft flow from a fully specified prompt read from a file (free text with commas must go through stdin).
dci build-cloud-flow < build.json
# build.json
{"question": "Every Monday at 09:00 UTC, run the report named Monthly AWS Spend, map each row to a DataHub event, and push the events to the finance-reports dataset. Use a schedule trigger."}
# Result: {"flowId": "...", "conversationId": "...", "answer": "...", "steps": [...]} — the flow is an unpublished draft.
# A short prompt in shorthand (no commas in the text).
dci build-cloud-flow question: "Every Monday morning run the Monthly AWS Spend report and post a summary to Slack"
# Capture the new flow's ID for the next steps (export, test-run, refine).
dci build-cloud-flow --output json < build.json | jq -r .flowId

Request

Content-Type: application/json

FieldTypeRequiredDescription
questionstringyesNatural language description of the CloudFlow to build from scratch.
conversationIdstringID of an existing conversation to continue. When omitted, a new conversation is started.
Raw JSON schema
{
"type": "object",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"description": "Natural language description of the CloudFlow to build from scratch."
},
"conversationId": {
"type": "string",
"description": "ID of an existing conversation to continue. When omitted, a new conversation is started."
}
}
}

Output

OK - Build event stream.

By default dci renders the result as a table. Use --output json to get the full structure described below — see Output formats.

Returns: string

Raw JSON schema
{
"type": "string"
}

Errors

On failure, dci prints a single error message — with a hint when one is available — and exits with a typed code your scripts can branch on. See Errors and exit codes for the full contract.

HTTP status to exit code mapping
HTTP statusExit codeError codeMeaning
40030VALIDATION_ERRORThe arguments or request body were rejected. Review the command's flags and payload.
40110AUTHENTICATION_FAILEDNot signed in, or the API token is invalid. Run dci login or check DCI_API_KEY.
40311PERMISSION_DENIEDThe DoiT user or the active customer context does not have access.
4061API_ERRORThe request failed; the printed error message has details.
500, 50240API_SERVER_ERRORThe API failed to process the request. Retryable; contact DoiT support if it persists.

Aliases: buildcloudflow