Browse the docs

Automations

Automations in Allpage: its screens, what you can do there and its operations.

Availability. Works when the business has it turned on and its plan includes it. Otherwise its tools answer needs (kind module) with how to turn it on: business.useTool, or a plan that includes it.

Screens

  • Automations (/automations)

What you can do

  • Turn on a ready-made automation: the assistant asks you first
  • Change an automation: the assistant asks you first
  • Turn off a ready-made automation: the assistant can do it on its own
  • Start an automation: the assistant can do it on its own
  • Save an automation draft: the assistant can do it on its own
  • Turn on an automation you built: the assistant asks you first
  • Turn off an automation you built: the assistant can do it on its own
  • Delete an automation: the assistant can do it on its own
  • Preview an automation: happens right away
  • Walk through an automation: happens right away
  • Send me a test: only you can do it, on its screen

For apps

Tools

  • automation_enable (Turn on a ready-made automation): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • automation_setParams (Change an automation): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • automation_disable (Turn off a ready-made automation): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • automation_createWorkflow (Start an automation): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • automation_saveWorkflow (Save an automation draft): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • automation_publishWorkflow (Turn on an automation you built): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • automation_disableWorkflow (Turn off an automation you built): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • automation_archiveWorkflow (Delete an automation): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • automation_previewWorkflow (Preview an automation): runs right away
  • automation_simulateWorkflow (Walk through an automation): runs right away

Reads

  • automation_templates (Automations you can turn on, in every area unless you name one)
  • automation_summary (What’s going on)

Only the owner, in Allpage

  • Send me a test

The owner’s screens

  • Automations (/automations)

Operations

Each one's input and output, as JSON Schema. Ids are typed (typed ids).

playbook.archiveWorkflow

Delete an automation

Kind
Change
Tool
automation_archiveWorkflow
Scope
playbook:write
Reached by
API, MCP

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workflowId": {
      "type": "string",
      "pattern": "^wfl_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A workflow id: wfl_ and 26 letters and digits."
    }
  },
  "required": [
    "workflowId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.createWorkflow

Start an automation

Kind
Change
Tool
automation_createWorkflow
Scope
playbook:write
Reached by
API, MCP

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "trigger": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "fromTemplate": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "copyOf": {
      "type": "string",
      "pattern": "^wfl_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A workflow id: wfl_ and 26 letters and digits."
    }
  },
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.disable

Turn off a ready-made automation

Kind
Change
Tool
automation_disable
Scope
playbook:write
Reached by
API, MCP, ChatGPT

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "playbookId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "playbookId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.disableWorkflow

Turn off an automation you built

Kind
Change
Tool
automation_disableWorkflow
Scope
playbook:write
Reached by
API, MCP

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workflowId": {
      "type": "string",
      "pattern": "^wfl_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A workflow id: wfl_ and 26 letters and digits."
    }
  },
  "required": [
    "workflowId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.enable

Turn on a ready-made automation

Kind
Change
Tool
automation_enable
Scope
playbook:write
Reached by
API, MCP, ChatGPT

customers see it: waits for the owner’s approval unless they chose Just do it for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "playbookId": {
      "type": "string",
      "minLength": 1
    },
    "params": {
      "default": {},
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "playbookId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.previewWorkflow

Preview an automation

Kind
Change
Tool
automation_previewWorkflow
Scope
playbook:read
Reached by
API, MCP

runs right away

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workflowId": {
      "type": "string",
      "pattern": "^wfl_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A workflow id: wfl_ and 26 letters and digits."
    },
    "graph": {
      "description": "The builder’s unsaved draft. Leave it out to use the saved draft of workflowId.",
      "type": "object",
      "properties": {
        "nodes": {
          "maxItems": 60,
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "trigger"
                  },
                  "event": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "where": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": [
                        "string",
                        "number",
                        "boolean"
                      ]
                    }
                  },
                  "params": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "event"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "wait"
                  },
                  "wait": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "from": {
                            "type": "string",
                            "const": "anchor"
                          },
                          "ms": {
                            "type": "integer",
                            "minimum": -34560000000,
                            "maximum": 34560000000
                          }
                        },
                        "required": [
                          "from",
                          "ms"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "from": {
                            "type": "string",
                            "const": "previous"
                          },
                          "ms": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 34560000000
                          },
                          "at": {
                            "type": "string",
                            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
                          }
                        },
                        "required": [
                          "from",
                          "ms"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "wait"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "branch"
                  },
                  "rule": {
                    "$ref": "#/$defs/__schema0"
                  },
                  "checks": {
                    "maxItems": 5,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    }
                  }
                },
                "required": [
                  "id",
                  "kind"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "action"
                  },
                  "action": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "input": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "action",
                  "input"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "end"
                  }
                },
                "required": [
                  "id",
                  "kind"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "edges": {
          "maxItems": 80,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "from": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "to": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "when": {
                "type": "string",
                "enum": [
                  "yes",
                  "no"
                ]
              }
            },
            "required": [
              "from",
              "to"
            ],
            "additionalProperties": false
          }
        },
        "exitWhen": {
          "$ref": "#/$defs/__schema0"
        },
        "once": {
          "type": "string",
          "enum": [
            "subject",
            "customer",
            "per-event"
          ]
        }
      },
      "required": [
        "nodes",
        "edges"
      ],
      "additionalProperties": false
    }
  },
  "additionalProperties": false,
  "$defs": {
    "__schema0": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "all": {
              "minItems": 1,
              "type": "array",
              "items": {
                "$ref": "#/$defs/__schema0"
              }
            }
          },
          "required": [
            "all"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "any": {
              "minItems": 1,
              "type": "array",
              "items": {
                "$ref": "#/$defs/__schema0"
              }
            }
          },
          "required": [
            "any"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "not": {
              "$ref": "#/$defs/__schema0"
            }
          },
          "required": [
            "not"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "count": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "since": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "event": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "event"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "days": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 3650
                        }
                      },
                      "required": [
                        "days"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "where": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                }
              },
              "required": [
                "event"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "count"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "sum": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "since": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "event": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "event"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "days": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 3650
                        }
                      },
                      "required": [
                        "days"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "where": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                },
                "field": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "event",
                "field"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "sum"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "daysSince": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "event"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "daysSince"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "visited": {
              "type": "object",
              "properties": {
                "offeringId": {
                  "description": "One offering’s visits only.",
                  "type": "string",
                  "pattern": "^off_[0-9a-hjkmnp-tv-z]{26}$"
                },
                "kind": {
                  "description": "One kind of offering only: class, appointment, workshop.",
                  "type": "string",
                  "pattern": "^[a-z_]{1,40}$"
                },
                "since": {
                  "type": "object",
                  "properties": {
                    "days": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 3650
                    }
                  },
                  "required": [
                    "days"
                  ],
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "visited"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "daysSinceVisit": {
              "type": "object",
              "properties": {
                "offeringId": {
                  "description": "One offering’s visits only.",
                  "type": "string",
                  "pattern": "^off_[0-9a-hjkmnp-tv-z]{26}$"
                },
                "kind": {
                  "description": "One kind of offering only: class, appointment, workshop.",
                  "type": "string",
                  "pattern": "^[a-z_]{1,40}$"
                }
              },
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "daysSinceVisit"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "hasGrant": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "productId": {
                  "type": "string"
                },
                "benefit": {
                  "description": "A membership or pack by its benefit name: membership:gold.",
                  "type": "string",
                  "pattern": "^(membership|pack|pass):[a-z0-9][a-z0-9_-]{0,62}$"
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "hasGrant"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "balance": {
              "type": "object",
              "properties": {
                "unit": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "unit"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "balance"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "tag": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              },
              "required": [
                "name"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "tag"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "channel": {
              "type": "object",
              "properties": {
                "is": {
                  "type": "string",
                  "pattern": "^[a-z0-9_-]{1,40}$"
                }
              },
              "required": [
                "is"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "channel"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "field": {
              "type": "object",
              "properties": {
                "record": {
                  "type": "string",
                  "const": "customer"
                },
                "key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              },
              "required": [
                "record",
                "key"
              ],
              "additionalProperties": false
            },
            "is": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "exists": {
              "type": "boolean"
            }
          },
          "required": [
            "field"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "state": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "key"
              ],
              "additionalProperties": false
            },
            "is": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "exists": {
              "type": "boolean"
            }
          },
          "required": [
            "state"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.publishWorkflow

Turn on an automation you built

Kind
Change
Tool
automation_publishWorkflow
Scope
playbook:write
Reached by
API, MCP

customers see it: waits for the owner’s approval unless they chose Just do it for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workflowId": {
      "type": "string",
      "pattern": "^wfl_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A workflow id: wfl_ and 26 letters and digits."
    },
    "inProgress": {
      "default": "continue",
      "type": "string",
      "enum": [
        "continue",
        "stop"
      ]
    }
  },
  "required": [
    "workflowId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.saveWorkflow

Save an automation draft

Kind
Change
Tool
automation_saveWorkflow
Scope
playbook:write
Reached by
API, MCP

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workflowId": {
      "type": "string",
      "pattern": "^wfl_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A workflow id: wfl_ and 26 letters and digits."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "draft": {
      "type": "object",
      "properties": {
        "nodes": {
          "maxItems": 60,
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "trigger"
                  },
                  "event": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "where": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": [
                        "string",
                        "number",
                        "boolean"
                      ]
                    }
                  },
                  "params": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "event"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "wait"
                  },
                  "wait": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "from": {
                            "type": "string",
                            "const": "anchor"
                          },
                          "ms": {
                            "type": "integer",
                            "minimum": -34560000000,
                            "maximum": 34560000000
                          }
                        },
                        "required": [
                          "from",
                          "ms"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "from": {
                            "type": "string",
                            "const": "previous"
                          },
                          "ms": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 34560000000
                          },
                          "at": {
                            "type": "string",
                            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
                          }
                        },
                        "required": [
                          "from",
                          "ms"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "wait"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "branch"
                  },
                  "rule": {
                    "$ref": "#/$defs/__schema0"
                  },
                  "checks": {
                    "maxItems": 5,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    }
                  }
                },
                "required": [
                  "id",
                  "kind"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "action"
                  },
                  "action": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "input": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "action",
                  "input"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "end"
                  }
                },
                "required": [
                  "id",
                  "kind"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "edges": {
          "maxItems": 80,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "from": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "to": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "when": {
                "type": "string",
                "enum": [
                  "yes",
                  "no"
                ]
              }
            },
            "required": [
              "from",
              "to"
            ],
            "additionalProperties": false
          }
        },
        "exitWhen": {
          "$ref": "#/$defs/__schema0"
        },
        "once": {
          "type": "string",
          "enum": [
            "subject",
            "customer",
            "per-event"
          ]
        }
      },
      "required": [
        "nodes",
        "edges"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "workflowId"
  ],
  "additionalProperties": false,
  "$defs": {
    "__schema0": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "all": {
              "minItems": 1,
              "type": "array",
              "items": {
                "$ref": "#/$defs/__schema0"
              }
            }
          },
          "required": [
            "all"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "any": {
              "minItems": 1,
              "type": "array",
              "items": {
                "$ref": "#/$defs/__schema0"
              }
            }
          },
          "required": [
            "any"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "not": {
              "$ref": "#/$defs/__schema0"
            }
          },
          "required": [
            "not"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "count": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "since": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "event": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "event"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "days": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 3650
                        }
                      },
                      "required": [
                        "days"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "where": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                }
              },
              "required": [
                "event"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "count"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "sum": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "since": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "event": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "event"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "days": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 3650
                        }
                      },
                      "required": [
                        "days"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "where": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                },
                "field": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "event",
                "field"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "sum"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "daysSince": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "event"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "daysSince"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "visited": {
              "type": "object",
              "properties": {
                "offeringId": {
                  "description": "One offering’s visits only.",
                  "type": "string",
                  "pattern": "^off_[0-9a-hjkmnp-tv-z]{26}$"
                },
                "kind": {
                  "description": "One kind of offering only: class, appointment, workshop.",
                  "type": "string",
                  "pattern": "^[a-z_]{1,40}$"
                },
                "since": {
                  "type": "object",
                  "properties": {
                    "days": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 3650
                    }
                  },
                  "required": [
                    "days"
                  ],
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "visited"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "daysSinceVisit": {
              "type": "object",
              "properties": {
                "offeringId": {
                  "description": "One offering’s visits only.",
                  "type": "string",
                  "pattern": "^off_[0-9a-hjkmnp-tv-z]{26}$"
                },
                "kind": {
                  "description": "One kind of offering only: class, appointment, workshop.",
                  "type": "string",
                  "pattern": "^[a-z_]{1,40}$"
                }
              },
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "daysSinceVisit"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "hasGrant": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "productId": {
                  "type": "string"
                },
                "benefit": {
                  "description": "A membership or pack by its benefit name: membership:gold.",
                  "type": "string",
                  "pattern": "^(membership|pack|pass):[a-z0-9][a-z0-9_-]{0,62}$"
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "hasGrant"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "balance": {
              "type": "object",
              "properties": {
                "unit": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "unit"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "balance"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "tag": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              },
              "required": [
                "name"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "tag"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "channel": {
              "type": "object",
              "properties": {
                "is": {
                  "type": "string",
                  "pattern": "^[a-z0-9_-]{1,40}$"
                }
              },
              "required": [
                "is"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "channel"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "field": {
              "type": "object",
              "properties": {
                "record": {
                  "type": "string",
                  "const": "customer"
                },
                "key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              },
              "required": [
                "record",
                "key"
              ],
              "additionalProperties": false
            },
            "is": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "exists": {
              "type": "boolean"
            }
          },
          "required": [
            "field"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "state": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "key"
              ],
              "additionalProperties": false
            },
            "is": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "exists": {
              "type": "boolean"
            }
          },
          "required": [
            "state"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.setParams

Change an automation

Kind
Change
Tool
automation_setParams
Scope
playbook:write
Reached by
API, MCP, ChatGPT

customers see it: waits for the owner’s approval unless they chose Just do it for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "playbookId": {
      "type": "string",
      "minLength": 1
    },
    "params": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "playbookId",
    "params"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.simulateWorkflow

Walk through an automation

Kind
Change
Tool
automation_simulateWorkflow
Scope
playbook:read
Reached by
API, MCP

runs right away

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workflowId": {
      "type": "string",
      "pattern": "^wfl_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A workflow id: wfl_ and 26 letters and digits."
    },
    "graph": {
      "description": "The builder’s unsaved draft. Leave it out to use the saved draft of workflowId.",
      "type": "object",
      "properties": {
        "nodes": {
          "maxItems": 60,
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "trigger"
                  },
                  "event": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "where": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": [
                        "string",
                        "number",
                        "boolean"
                      ]
                    }
                  },
                  "params": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "event"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "wait"
                  },
                  "wait": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "from": {
                            "type": "string",
                            "const": "anchor"
                          },
                          "ms": {
                            "type": "integer",
                            "minimum": -34560000000,
                            "maximum": 34560000000
                          }
                        },
                        "required": [
                          "from",
                          "ms"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "from": {
                            "type": "string",
                            "const": "previous"
                          },
                          "ms": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 34560000000
                          },
                          "at": {
                            "type": "string",
                            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
                          }
                        },
                        "required": [
                          "from",
                          "ms"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "wait"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "branch"
                  },
                  "rule": {
                    "$ref": "#/$defs/__schema0"
                  },
                  "checks": {
                    "maxItems": 5,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80
                    }
                  }
                },
                "required": [
                  "id",
                  "kind"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "action"
                  },
                  "action": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "input": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {}
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "action",
                  "input"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40
                  },
                  "kind": {
                    "type": "string",
                    "const": "end"
                  }
                },
                "required": [
                  "id",
                  "kind"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "edges": {
          "maxItems": 80,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "from": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "to": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "when": {
                "type": "string",
                "enum": [
                  "yes",
                  "no"
                ]
              }
            },
            "required": [
              "from",
              "to"
            ],
            "additionalProperties": false
          }
        },
        "exitWhen": {
          "$ref": "#/$defs/__schema0"
        },
        "once": {
          "type": "string",
          "enum": [
            "subject",
            "customer",
            "per-event"
          ]
        }
      },
      "required": [
        "nodes",
        "edges"
      ],
      "additionalProperties": false
    },
    "customerId": {
      "type": "string",
      "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A customer id: cus_ and 26 letters and digits."
    }
  },
  "additionalProperties": false,
  "$defs": {
    "__schema0": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "all": {
              "minItems": 1,
              "type": "array",
              "items": {
                "$ref": "#/$defs/__schema0"
              }
            }
          },
          "required": [
            "all"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "any": {
              "minItems": 1,
              "type": "array",
              "items": {
                "$ref": "#/$defs/__schema0"
              }
            }
          },
          "required": [
            "any"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "not": {
              "$ref": "#/$defs/__schema0"
            }
          },
          "required": [
            "not"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "count": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "since": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "event": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "event"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "days": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 3650
                        }
                      },
                      "required": [
                        "days"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "where": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                }
              },
              "required": [
                "event"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "count"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "sum": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                },
                "since": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "event": {
                          "type": "string",
                          "minLength": 1
                        }
                      },
                      "required": [
                        "event"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "days": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 3650
                        }
                      },
                      "required": [
                        "days"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "where": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string"
                  },
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number",
                      "boolean"
                    ]
                  }
                },
                "field": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "event",
                "field"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "sum"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "daysSince": {
              "type": "object",
              "properties": {
                "event": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "event"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "daysSince"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "visited": {
              "type": "object",
              "properties": {
                "offeringId": {
                  "description": "One offering’s visits only.",
                  "type": "string",
                  "pattern": "^off_[0-9a-hjkmnp-tv-z]{26}$"
                },
                "kind": {
                  "description": "One kind of offering only: class, appointment, workshop.",
                  "type": "string",
                  "pattern": "^[a-z_]{1,40}$"
                },
                "since": {
                  "type": "object",
                  "properties": {
                    "days": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 3650
                    }
                  },
                  "required": [
                    "days"
                  ],
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "visited"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "daysSinceVisit": {
              "type": "object",
              "properties": {
                "offeringId": {
                  "description": "One offering’s visits only.",
                  "type": "string",
                  "pattern": "^off_[0-9a-hjkmnp-tv-z]{26}$"
                },
                "kind": {
                  "description": "One kind of offering only: class, appointment, workshop.",
                  "type": "string",
                  "pattern": "^[a-z_]{1,40}$"
                }
              },
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "daysSinceVisit"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "hasGrant": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "productId": {
                  "type": "string"
                },
                "benefit": {
                  "description": "A membership or pack by its benefit name: membership:gold.",
                  "type": "string",
                  "pattern": "^(membership|pack|pass):[a-z0-9][a-z0-9_-]{0,62}$"
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "hasGrant"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "balance": {
              "type": "object",
              "properties": {
                "unit": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "unit"
              ],
              "additionalProperties": false
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "eq": {
              "type": "number"
            }
          },
          "required": [
            "balance"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "tag": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              },
              "required": [
                "name"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "tag"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "channel": {
              "type": "object",
              "properties": {
                "is": {
                  "type": "string",
                  "pattern": "^[a-z0-9_-]{1,40}$"
                }
              },
              "required": [
                "is"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "channel"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "field": {
              "type": "object",
              "properties": {
                "record": {
                  "type": "string",
                  "const": "customer"
                },
                "key": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40
                }
              },
              "required": [
                "record",
                "key"
              ],
              "additionalProperties": false
            },
            "is": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "exists": {
              "type": "boolean"
            }
          },
          "required": [
            "field"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "state": {
              "type": "object",
              "properties": {
                "key": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "key"
              ],
              "additionalProperties": false
            },
            "is": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            },
            "gte": {
              "type": "number"
            },
            "lte": {
              "type": "number"
            },
            "exists": {
              "type": "boolean"
            }
          },
          "required": [
            "state"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

playbook.summary

What’s going on

Kind
Read
Tool
automation_summary
Scope
playbook:read
Reached by
API, MCP

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string"
            },
            "facts": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "One-line facts, e.g. \"3 bookings today\"."
            },
            "attention": {
              "description": "Things that need the owner, each with a plain reason.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "text": {
                    "type": "string"
                  },
                  "href": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "text"
                ],
                "additionalProperties": false
              }
            },
            "happening": {
              "description": "What’s on today, each at its time.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "at": {
                    "type": "number",
                    "description": "Epoch milliseconds."
                  },
                  "text": {
                    "type": "string"
                  },
                  "href": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "at",
                  "text"
                ],
                "additionalProperties": false
              }
            },
            "metrics": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "label": {
                    "type": "string"
                  },
                  "value": {
                    "type": "number"
                  },
                  "prior": {
                    "type": "number"
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "count",
                      "money"
                    ]
                  },
                  "href": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "label",
                  "value"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "title",
            "facts"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

playbook.templates

Automations you can turn on, in every area unless you name one

Kind
Read
Tool
automation_templates
Scope
playbook:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "module": {
      "type": "string",
      "maxLength": 40
    }
  },
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "Turn it on with playbook.enable and this id."
              },
              "title": {
                "type": "string"
              },
              "summary": {
                "type": "string"
              },
              "defaults": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              },
              "on": {
                "type": "boolean"
              },
              "params": {
                "description": "Its settings, when it’s on.",
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {}
              }
            },
            "required": [
              "id",
              "title",
              "summary",
              "defaults",
              "on"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}