GoliathDevelopersGet an API key
Reference/Workflowsgenerated from the gateway manifest

listWorkflows

List the organization's workflow automations (paginated, non-archived by default).

POST/api/v1/callREADreadruns as the key's owner
View as Markdown

List the organization's workflow automations (paginated, non-archived by default). Returns the group id to use in getWorkflow and the other workflow operations. status, domain, name (a name search, any case) and triggerType (on a version of that status; hidden groups included) narrow rows and total. For a workflow the person named, pass their words as name and compare each row's name for the exact one, reading every page total counts before calling one row the only exact match (names are not unique). Each row carries channelsAcrossVersions: the channels the workflow messages on (TEXT, EMAIL, both, or [] when it messages nobody; never null), the same answer the app's Channel filter gives, so read it to PICK workflows out of a list. It spans EVERY version not deleted: the published one, the ones it superseded and an unpublished draft. getWorkflow.channels reads ONE: the most recently PUBLISHED version whatever its status (active, paused or suspended), else the pending draft. NEITHER says it is SENDING: a paused or suspended head keeps its configured channels while sending nothing. Read status for that.

curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operationId": "listWorkflows",
    "variables": {}
  }'
import { GoliathClient } from '@goliath-data/sdk'

const goliath = new GoliathClient({
  apiKey: process.env.GOLIATH_API_KEY!,
  baseUrl: 'https://server.goliathdata.com',
})

const result = await goliath.workflows.listWorkflows({})
const res = await fetch('https://server.goliathdata.com/api/v1/call', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.GOLIATH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    operationId: 'listWorkflows',
    variables: {}
  }),
})
const { data, errors } = await res.json()

limit is clamped to 50.

Variables

The example sends only what the schema requires. Some operations also need one of several optional variables (one filter or another, say); the description above says which.

limitInt

Default 20.

offsetInt

Default 0.

statusWorkflowGroupStatus
DRAFTACTIVEPAUSEDSUSPENDED
domainWorkflowDomain
PROPERTYCONTACTPIPELINE_ITEMDEALAPPOINTMENTEVENTSLACKCONTRACT
nameString
triggerType[WorkflowTriggerType!]
MUTATIONMATCHCREATEDMANUALINBOUND_TEXTINBOUND_EMAILINBOUND_CALLEVENT_RECEIVEDSLACK_MESSAGE_RECEIVEDRECORD_EVENTCOMMUNICATIONCONTRACT_EVENT

Response

What comes back under data: a list shows as one entry, and a value as its type.

response shape
{
  "data": {
    "workflowAutomationsQuery": {
      "workflowGroupsPage": {
        "items": [
          {
            "id": "<ID>",
            "name": "…",
            "description": "…",
            "status": "DRAFT",
            "channelsAcrossVersions": [
              "TEXT"
            ],
            "workflowDomain": "PROPERTY",
            "systemCategory": "…",
            "folderId": "<ID>",
            "createdAt": "2026-01-01T00:00:00.000Z",
            "updatedAt": "2026-01-01T00:00:00.000Z",
            "archivedAt": "2026-01-01T00:00:00.000Z"
          }
        ],
        "total": 0
      }
    }
  }
}

Errors

Behaviour

A read. It rejects an Idempotency-Key header with 400 bad_request.