Last modified: August 22, 2025
To define a custom workflow action for an app on the new developer platform, include a workflow-actions directory in the project, along with a *-hsmeta.json configuration file.

Project directory structure

project-folder/
└── src/
    └── app/
        └── app-hsmeta.json
        └── workflow-actions/
            └── workflow-action-hsmeta.json

Custom workflow action definition

Below are the available configuration options for the *-hsmeta.json file.
{
  "uid": "simple_notification_action",
  "type": "workflow-action",
  "config": {
    "actionUrl": "https://example.com",
    "isPublished": false,
    "supportedClients": [
      {
        "client": "WORKFLOWS"
      }
    ],
    "inputFields": [
      {
        "typeDefinition": {
          "name": "message",
          "type": "string",
          "fieldType": "textarea"
        },
        "supportedValueTypes": ["STATIC_VALUE"],
        "isRequired": true
      },
      {
        "typeDefinition": {
          "name": "priority",
          "type": "enumeration",
          "fieldType": "select",
          "options": [
            {
              "value": "high",
              "label": "High Priority"
            },
            {
              "value": "normal",
              "label": "Normal Priority"
            },
            {
              "value": "low",
              "label": "Low Priority"
            }
          ]
        },
        "supportedValueTypes": ["STATIC_VALUE"],
        "isRequired": true
      }
    ],
    "labels": {
      "en": {
        "actionName": "My Custom Action (via Projects V2)",
        "actionDescription": "Sends a notification with custom message and priority level",
        "actionCardContent": "Send {{priority}} priority notification",
        "inputFieldLabels": {
          "message": "Notification Message",
          "priority": "Priority Level"
        },
        "inputFieldDescriptions": {
          "message": "Enter the message to be sent in the notification",
          "priority": "Select the priority level for this notification"
        }
      }
    },
    "objectTypes": ["CONTACT"]
  }
}

Fields marked with * are required.

FieldTypeDescription
uid*StringAn internal unique identifier for the workflow action.
type*StringThe type of component, which should be workflow-action in this case.
actionUrl*StringThe webhook URL of the API to deliver a workflow execution request.
isPublishedBooleanDetermines whether the definition is visible in accounts that installed your app. By default, this is set to false.
supportedClients*Array of objectsSpecifies the clients that the custom workflow action supports. Each object in the array should have a client key with a string value indicating the client type (e.g., WORKFLOWS).
inputFieldsArrayThe values for the inputs that the user has filled out.
typeDefinition.nameStringThe name or key of the input field.
typeDefinition.typeStringThe value type that the input field should expect.
typeDefinition.fieldTypeStringThe type of field that appears to users creating the workflow.
typeDefinition.optionsArrayFor enumeration types, this field provides a list of options. Each option must have a value, based on the input the user provides, and a label, which identifies the option in the workflows tool.
inputFieldDependenciesArrayA list of rules that define the relationships between two or more inputs, based on their dependencyType. Learn more in the example here.
labels.<locale>*StringLocale key that maps to the locale definition. At a minimum, an english label (en) and its definition must be defined.
labels.<locale>.inputFieldDescriptionsObjectAn object that defines the details for the inputs for your action. In the example above, this object includes message and priority fields.
labels.<locale>.inputFieldOptionLabelsObjectAn object that’s required if your input field(s) have options. Provides a map of input field option labels, keyed by the option’s value or label.
labels.<locale>.outputFieldLabelsObjectAn object that maps the definitions from outputFields to the corresponding labels that appear in the workflows tool.
labels.<locale>.actionName*StringThe action’s name as shown in the Choose an action panel in the workflows editor.
labels.<locale>.appDisplayName*StringThe name of the section in the Choose an action panel where all actions for the app appear. If appDisplayName is defined for multiple actions, the first one found will be used.
labels.<locale>.actionCardContentStringA summarized description shown in the action’s card.
labels.<locale>.executionRulesObjectAn object that maps the definitions from your executionRules to messages that will appear for execution results in the workflow’s history.
objectTypesArrayThe available CRM object types that this action can be used with. If empty, the action will be available for all object types.
outputFieldsArrayThe values that the action will output that can be used by later actions in the workflow. A custom action can have 0, 1, or many outputs.
executionRulesObjectA list of definitions you can specify to surface errors from your service to the user creating the workflow.