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

Returns the app's workflows.

Archived workflows are left out unless you set include_archived. Use limit and offset to page through the results.

Passing file_keys switches this to a lookup by file name and ignores limit and offset entirely, returning every match. That is the only way to fetch more than 200 workflows in one call, and it is meant for resolving names you already hold rather than for paging.

The response omits each workflow's definition. Get a single workflow with Get workflow when you need the 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

Request

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

Path parameters

app_idstring required

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

Query parameters

include_archivedboolean

Include archived workflows in the results.

limitinteger

Most workflows to return.

offsetinteger

How many workflows to skip, for paging.

file_keysstring[]

Look workflows up by their file name instead of paging. Repeat the parameter for several. At most 50, each at most 256 characters and free of path separators.

Response

The app's workflows.

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.

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.

triggerobject

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

total_runsinteger

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

consecutive_failuresinteger

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

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.

created_datestring date-time nullable

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

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",
    "trigger": {
      "config": {
        "cron_expression": "0 9 * * *",
        "timezone": "UTC",
        "trigger_type": "scheduled"
      }
    },
    "total_runs": 48,
    "last_run_at": "2026-08-25T09:12:44Z",
    "last_run_status": "success",
    "created_date": "2026-07-02T11:04:00Z"
  }
]

Changes

    • breaking

      query request parameter file_keys list-of-types was narrowed by removing types null

    • breaking

      for the query request parameter file_keys, the type changed from no type to array

    • info

      added the optional property / to the response with the status