<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the specified workflow, including the full definition it currently runs.

This is the only endpoint that returns definition.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

get/api/apps/{app_id}/workflows/{workflow_id}

Request

  • Base URL: https://app.base44.com
  • URL: https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}
  • Auth: HTTP bearer

Path parameters

app_idstring required

ID of the app whose workflows you want to work with.

workflow_idstring required

ID of the workflow, as returned in id by List workflows.

Response

The workflow, including its current definition.

run_accounting_availableboolean

Whether definition-level run counters and last-run fields are available. False for hooks: numeric counters are placeholders (0), last-run fields are null; use run history instead.

idstring required

ID of the workflow.

app_idstring required

ID of the app the workflow belongs to.

file_keystring nullable

Name of the workflow's file in the app's code. This is null on workflows saved before files were kept.

namestring required

Name of the workflow.

descriptionstring nullable

What the workflow is for.

statusstring required

Whether the workflow runs: active, inactive, or archived. See Workflow status for what each means and how it changes.

status_reasonstring nullable

Why Base44 changed the workflow's status on its own, as one of consecutive_failures, end_condition_reached, migration_activation_failed, workflows_not_available, app_blocked, or connector_disconnected. This is null when you changed the status yourself. See Workflow status for what each code means.

current_version_idstring nullable

Version the workflow runs today, as the SHA-256 hash of that definition. This is null until a definition is saved.

triggerobject

What starts the workflow. The trigger sits under config, keyed by trigger_type.

app_type_contextobject nullable

Caller-specific context captured when the workflow was created, such as the conversation that authored it. This API never sets it, so a workflow you create through it starts with null. Updating a workflow through this API doesn't clear an existing value either, so a workflow originally authored through the Base44 app editor or a superagent keeps its context here even after an API update.

last_run_atstring date-time nullable

When the workflow last started running, as an ISO 8601 UTC timestamp. This is null before its first run or for hooks; use run history for hooks.

last_run_statusstring nullable

How the workflow's most recent run ended: success, failed, or cancelled. This is null before the first run or for hooks; use run history for hooks. See Workflow status for how this compares to a run's own status.

consecutive_failuresinteger

Runs that have failed in a row. Resets on the next success. Unavailable when run_accounting_available is false; the placeholder is 0.

total_runsinteger

Runs the workflow has started, ever. Unavailable when run_accounting_available is false; the placeholder is 0.

successful_runsinteger

Runs that finished successfully, ever. Unavailable when run_accounting_available is false; the placeholder is 0.

failed_runsinteger

Runs that ended in an error, ever. Unavailable when run_accounting_available is false; the placeholder is 0.

created_datestring date-time nullable

When the workflow was created, as an ISO 8601 UTC timestamp.

updated_datestring date-time nullable

When the workflow was last changed, as an ISO 8601 UTC timestamp.

created_bystring nullable

Email of whoever created the workflow.

definitionobject nullable

The steps the workflow runs, as a CNCF Serverless Workflow v1.0 document. This is null when no version has been saved yet. Only this endpoint returns it. List workflows leaves it out.

Example response

{
  "social_post": {
    "platform": "linkedin",
    "title": "Meet our new app",
    "body": "Our new app is ready to try.",
    "hashtags": [
      "launch"
    ]
  },
  "id": "68b1c0d4e7b91d003c45a1f2",
  "app_id": "6820f3a4e7b91d003c45a1f2",
  "file_key": "email-me-new-signups",
  "name": "Email me new signups",
  "description": "Sends an email whenever a User record is created.",
  "status": "active",
  "status_reason": "consecutive_failures",
  "current_version_id": "9f2c1a7b3e5d84f60c1b2a9e7d4f8c3b6a5e2d1f0c9b8a7e6d5c4b3a2f1e0d9c",
  "trigger": {
    "config": {
      "cron_expression": "0 9 * * *",
      "timezone": "UTC",
      "trigger_type": "scheduled"
    }
  },
  "app_type_context": {
    "anchor_message_id": "68b1c0d4e7b91d003c45a1f2",
    "conversation_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
  },
  "last_run_at": "2026-08-25T09:12:44Z",
  "last_run_status": "success",
  "total_runs": 48,
  "successful_runs": 44,
  "failed_runs": 3,
  "created_date": "2026-07-02T11:04:00Z",
  "updated_date": "2026-08-20T16:31:00Z",
  "created_by": "you@example.com",
  "definition": {
    "do": [],
    "document": {
      "dsl": "1.0.0",
      "name": "notify",
      "version": "1.0.0"
    }
  }
}

Changes

    • info

      added the optional property to the response with the status

    • info

      the security scope read_only was added to the endpoint's security scheme PersonalAccessTokenAuth

    • info

      the security scope full_access was removed from the endpoint's security scheme PersonalAccessTokenAuth