Browse the docs

Forms

Forms 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

  • Forms (/forms)

What you can do

  • Save a form: the assistant asks you first
  • Set when a requirement is checked: the assistant asks you first
  • Decide an application: the assistant asks you first

For apps

Tools

  • forms_save (Save a form): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • forms_attach (Set when a requirement is checked): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • forms_decide (Decide an application): customers see it: waits for the owner’s approval unless they chose Just do it for your app

Reads

  • forms_list (List forms)
  • forms_get (Read a form)
  • forms_stepDone (Check whether a form was signed or a record sent)
  • forms_applications (See applications)
  • forms_submission (Read an application)
  • forms_requirements (See what bookings ask for)
  • forms_results (See who signed forms and sent records)
  • forms_customer (See what a customer has signed)
  • forms_summary (What’s going on)

The owner’s screens

  • Forms (/forms)

Operations

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

forms.attach

Set when a requirement is checked

Kind
Change
Tool
forms_attach
Scope
forms: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": {
    "productId": {
      "type": "string",
      "pattern": "^prd_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "The admission’s product, from offerings.get (admissions[].productId) or forms.requirements. A product id: prd_ and 26 letters and digits."
    },
    "key": {
      "type": "string",
      "pattern": "^(age:(\\d{1,2}\\+|\\d{1,2}-\\d{1,2})|(form|membership|file):[a-z0-9][a-z0-9_-]{0,62}|approval)$",
      "description": "The requirement: age:16+, age:6-9, form:<key>, file:<key> or approval."
    },
    "timing": {
      "default": "before_hold",
      "description": "before_hold or before_payment: done before booking; deadline: the booking confirms and it’s due deadlineDays before the first session; check_in: check-in waits for it.",
      "type": "string",
      "enum": [
        "before_hold",
        "before_payment",
        "deadline",
        "check_in"
      ]
    },
    "asOf": {
      "description": "For an age: the date it’s counted on, like a camp’s June 1. Left out, each session’s own date.",
      "anyOf": [
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "deadlineDays": {
      "description": "For a deadline: how many days before the first session it’s due.",
      "type": "integer",
      "minimum": 0,
      "maximum": 365
    },
    "remove": {
      "default": false,
      "description": "Take these settings off (a key on the admission itself stays; change it with offerings.save).",
      "type": "boolean"
    }
  },
  "required": [
    "productId",
    "key"
  ],
  "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"
        }
      }
    }
  ]
}

forms.customer

See what a customer has signed

Kind
Read
Tool
forms_customer
Scope
forms:read
Reached by
API, MCP

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "customerId": {
      "type": "string",
      "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A customer id: cus_ and 26 letters and digits."
    }
  },
  "required": [
    "customerId"
  ],
  "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": {
            "signed": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "resultId": {
                    "type": "string",
                    "pattern": "^rr_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A requirement result id: rr_ and 26 letters and digits."
                  },
                  "what": {
                    "type": "string"
                  },
                  "when": {
                    "type": "string"
                  },
                  "for": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "current": {
                    "type": "boolean"
                  },
                  "validUntil": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "resultId",
                  "what",
                  "when",
                  "for",
                  "current",
                  "validUntil"
                ],
                "additionalProperties": false
              }
            },
            "total": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "signed",
            "total"
          ],
          "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": {}
    }
  ]
}

forms.decide

Decide an application

Kind
Change
Tool
forms_decide
Scope
forms: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": {
    "submissionId": {
      "type": "string",
      "pattern": "^sub_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "From forms.applications. A submission id: sub_ and 26 letters and digits."
    },
    "decision": {
      "type": "string",
      "enum": [
        "review",
        "accept",
        "decline"
      ],
      "description": "review: mark it in review (nobody is messaged); accept or decline: tell the applicant."
    },
    "give": {
      "description": "With accept: give them this at no cost, like a scholarship pass that covers a course.",
      "type": "object",
      "properties": {
        "productId": {
          "type": "string",
          "pattern": "^prd_[0-9a-hjkmnp-tv-z]{26}$",
          "description": "A pack, pass or membership that doesn’t renew, from commerce.products (type access). A product id: prd_ and 26 letters and digits."
        }
      },
      "required": [
        "productId"
      ],
      "additionalProperties": false
    },
    "admit": {
      "description": "With accept: their place in this admission costs nothing when they book it.",
      "type": "object",
      "properties": {
        "productId": {
          "type": "string",
          "pattern": "^prd_[0-9a-hjkmnp-tv-z]{26}$",
          "description": "The admission’s product, from offerings.get (admissions[].productId). A product id: prd_ and 26 letters and digits."
        }
      },
      "required": [
        "productId"
      ],
      "additionalProperties": false
    },
    "code": {
      "description": "With accept: send them a code for this much off, good once.",
      "type": "object",
      "properties": {
        "percent": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "productIds": {
          "default": [],
          "description": "What it’s off; left out, anything they buy.",
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^prd_[0-9a-hjkmnp-tv-z]{26}$",
            "description": "A product id: prd_ and 26 letters and digits."
          }
        }
      },
      "required": [
        "percent"
      ],
      "additionalProperties": false
    },
    "message": {
      "description": "A line from you in the message they get.",
      "type": "string",
      "maxLength": 1000
    }
  },
  "required": [
    "submissionId",
    "decision"
  ],
  "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"
        }
      }
    }
  ]
}

forms.get

Read a form

Kind
Read
Tool
forms_get
Scope
forms:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "formId": {
      "type": "string",
      "pattern": "^frm_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A form id: frm_ and 26 letters and digits."
    },
    "key": {
      "type": "string",
      "maxLength": 63
    }
  },
  "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": {
            "formId": {
              "type": "string",
              "pattern": "^frm_[0-9a-hjkmnp-tv-z]{26}$",
              "description": "A form id: frm_ and 26 letters and digits."
            },
            "key": {
              "type": [
                "string",
                "null"
              ]
            },
            "kind": {
              "type": "string",
              "enum": [
                "general",
                "intake",
                "waiver",
                "application"
              ]
            },
            "title": {
              "type": "string"
            },
            "version": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "questions": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^[a-z0-9_-]{1,40}$"
                  },
                  "label": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "text",
                      "email",
                      "tel",
                      "textarea",
                      "select",
                      "checkbox",
                      "date",
                      "file"
                    ]
                  },
                  "required": {
                    "type": "boolean"
                  },
                  "options": {
                    "default": [],
                    "maxItems": 12,
                    "type": "array",
                    "items": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 60
                    }
                  },
                  "field": {
                    "type": "string",
                    "pattern": "^fld_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A field id: fld_ and 26 letters and digits."
                  },
                  "sensitive": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "label",
                  "type",
                  "required",
                  "options"
                ],
                "additionalProperties": false
              }
            },
            "waiverText": {
              "type": [
                "string",
                "null"
              ]
            },
            "sensitive": {
              "type": "boolean"
            },
            "health": {
              "type": "boolean"
            },
            "consentText": {
              "type": [
                "string",
                "null"
              ]
            },
            "application": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "open": {
                      "default": true,
                      "type": "boolean"
                    },
                    "closesOn": {
                      "default": null,
                      "description": "The last day it takes applications, in the business’s zone.",
                      "anyOf": [
                        {
                          "type": "string",
                          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "fileMb": {
                      "default": 20,
                      "description": "The most one file may be, in MB.",
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 100
                    },
                    "intro": {
                      "default": "",
                      "description": "What it’s for and what you look for, above the questions.",
                      "type": "string",
                      "maxLength": 2000
                    }
                  },
                  "required": [
                    "open",
                    "closesOn",
                    "fileMb",
                    "intro"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ],
              "description": "An application’s settings; null for other forms."
            },
            "updatedAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
            }
          },
          "required": [
            "formId",
            "key",
            "kind",
            "title",
            "version",
            "questions",
            "waiverText",
            "sensitive",
            "health",
            "consentText",
            "application",
            "updatedAt"
          ],
          "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": {}
    }
  ]
}

forms.list

List forms

Kind
Read
Tool
forms_list
Scope
forms:read
Reached by
API, MCP, ChatGPT

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": {
            "forms": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "formId": {
                    "type": "string",
                    "pattern": "^frm_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A form id: frm_ and 26 letters and digits."
                  },
                  "key": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "general",
                      "intake",
                      "waiver",
                      "application"
                    ]
                  },
                  "title": {
                    "type": "string"
                  },
                  "version": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "questions": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^[a-z0-9_-]{1,40}$"
                        },
                        "label": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 80
                        },
                        "type": {
                          "type": "string",
                          "enum": [
                            "text",
                            "email",
                            "tel",
                            "textarea",
                            "select",
                            "checkbox",
                            "date",
                            "file"
                          ]
                        },
                        "required": {
                          "type": "boolean"
                        },
                        "options": {
                          "default": [],
                          "maxItems": 12,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 60
                          }
                        },
                        "field": {
                          "type": "string",
                          "pattern": "^fld_[0-9a-hjkmnp-tv-z]{26}$",
                          "description": "A field id: fld_ and 26 letters and digits."
                        },
                        "sensitive": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "id",
                        "label",
                        "type",
                        "required",
                        "options"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "waiverText": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "sensitive": {
                    "type": "boolean"
                  },
                  "health": {
                    "type": "boolean"
                  },
                  "consentText": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "application": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "open": {
                            "default": true,
                            "type": "boolean"
                          },
                          "closesOn": {
                            "default": null,
                            "description": "The last day it takes applications, in the business’s zone.",
                            "anyOf": [
                              {
                                "type": "string",
                                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "fileMb": {
                            "default": 20,
                            "description": "The most one file may be, in MB.",
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100
                          },
                          "intro": {
                            "default": "",
                            "description": "What it’s for and what you look for, above the questions.",
                            "type": "string",
                            "maxLength": 2000
                          }
                        },
                        "required": [
                          "open",
                          "closesOn",
                          "fileMb",
                          "intro"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "An application’s settings; null for other forms."
                  },
                  "updatedAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                  }
                },
                "required": [
                  "formId",
                  "key",
                  "kind",
                  "title",
                  "version",
                  "questions",
                  "waiverText",
                  "sensitive",
                  "health",
                  "consentText",
                  "application",
                  "updatedAt"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "forms"
          ],
          "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": {}
    }
  ]
}

forms.requirements

See what bookings ask for

Kind
Read
Tool
forms_requirements
Scope
forms:read
Reached by
API, MCP, ChatGPT

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": {
            "admissions": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "offering": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string",
                    "description": "The admission, as it sells."
                  },
                  "productId": {
                    "type": "string",
                    "pattern": "^prd_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "What forms.attach takes. A product id: prd_ and 26 letters and digits."
                  },
                  "requirements": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "key": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string",
                          "description": "What it asks, in the owner’s words: “Studio waiver: sign before booking”."
                        },
                        "words": {
                          "type": "string",
                          "description": "In the owner’s words."
                        },
                        "timing": {
                          "type": "string",
                          "enum": [
                            "before_hold",
                            "before_payment",
                            "deadline",
                            "check_in"
                          ]
                        },
                        "asOf": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "deadlineDays": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "key",
                        "title",
                        "words",
                        "timing",
                        "asOf",
                        "deadlineDays"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "offering",
                  "name",
                  "productId",
                  "requirements"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "admissions"
          ],
          "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": {}
    }
  ]
}

forms.results

See who signed forms and sent records

Kind
Read
Tool
forms_results
Scope
forms:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "key": {
      "description": "One requirement, like form:waiver; left out, all.",
      "type": "string",
      "maxLength": 80
    }
  },
  "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": {
            "results": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "resultId": {
                    "type": "string",
                    "pattern": "^rr_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A requirement result id: rr_ and 26 letters and digits."
                  },
                  "customerId": {
                    "type": "string",
                    "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A customer id: cus_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "for": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "key": {
                    "type": "string"
                  },
                  "what": {
                    "type": "string",
                    "description": "“Studio waiver, version 2” or “vaccination record”."
                  },
                  "at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                  },
                  "validUntil": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "current": {
                    "type": "boolean"
                  },
                  "ranOut": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "resultId",
                  "customerId",
                  "name",
                  "for",
                  "key",
                  "what",
                  "at",
                  "validUntil",
                  "current",
                  "ranOut"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "results"
          ],
          "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": {}
    }
  ]
}

forms.save

Save a form

Kind
Change
Tool
forms_save
Scope
forms: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": {
    "formId": {
      "description": "The form to change, from forms.list.",
      "type": "string",
      "pattern": "^frm_[0-9a-hjkmnp-tv-z]{26}$"
    },
    "key": {
      "description": "Its name for requirements: an admission that requires form:<key> asks for it. Saving with a key that exists changes that form.",
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9_-]{0,62}$"
    },
    "kind": {
      "default": "general",
      "description": "general, intake, or waiver (needs waiverText).",
      "type": "string",
      "enum": [
        "general",
        "intake",
        "waiver",
        "application"
      ]
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "questions": {
      "default": [],
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9_-]{1,40}$"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "type": {
            "type": "string",
            "enum": [
              "text",
              "email",
              "tel",
              "textarea",
              "select",
              "checkbox",
              "date",
              "file"
            ]
          },
          "required": {
            "type": "boolean"
          },
          "options": {
            "default": [],
            "maxItems": 12,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "field": {
            "type": "string",
            "pattern": "^fld_[0-9a-hjkmnp-tv-z]{26}$",
            "description": "A field id: fld_ and 26 letters and digits."
          },
          "sensitive": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "label",
          "type",
          "required"
        ],
        "additionalProperties": false
      }
    },
    "waiverText": {
      "description": "For a waiver: the words people agree to.",
      "type": "string",
      "maxLength": 20000
    },
    "sensitive": {
      "default": false,
      "description": "Answers only the owner and roles that see sensitive details read.",
      "type": "boolean"
    },
    "health": {
      "default": false,
      "description": "It asks for health information; needs consentText.",
      "type": "boolean"
    },
    "consentText": {
      "type": "string",
      "maxLength": 2000
    },
    "application": {
      "description": "For an application: open, closesOn (the last day), fileMb (the most one file may be) and intro. People apply at /apply/<key> on your website.",
      "type": "object",
      "properties": {
        "open": {
          "default": true,
          "type": "boolean"
        },
        "closesOn": {
          "default": null,
          "description": "The last day it takes applications, in the business’s zone.",
          "anyOf": [
            {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
            },
            {
              "type": "null"
            }
          ]
        },
        "fileMb": {
          "default": 20,
          "description": "The most one file may be, in MB.",
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        },
        "intro": {
          "default": "",
          "description": "What it’s for and what you look for, above the questions.",
          "type": "string",
          "maxLength": 2000
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "title"
  ],
  "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"
        }
      }
    }
  ]
}

forms.stepDone

Check whether a form was signed or a record sent

Kind
Read
Tool
forms_stepDone
Scope
forms:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "stepId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "From the needs answer’s checkInput."
    }
  },
  "required": [
    "stepId"
  ],
  "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": {
            "done": {
              "type": "boolean",
              "description": "Signed or sent. Book again to go on."
            }
          },
          "required": [
            "done"
          ],
          "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": {}
    }
  ]
}

forms.summary

What’s going on

Kind
Read
Tool
forms_summary
Scope
forms: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": {}
    }
  ]
}