Browse the docs

Business details

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

Availability. Every business has it.

Screens

  • Settings (/settings)
  • Your tools (/tools)

What you can do

  • Update your business details: the assistant asks you first
  • Update your address: the assistant asks you first
  • Update your opening hours: the assistant asks you first
  • Update your service area: the assistant asks you first
  • Turn a tool on or off: the assistant asks you first
  • Change your time zone: the assistant asks you first
  • Add or change a location: the assistant can do it on its own
  • List your business in the Allpage directory: the assistant asks you first
  • Show your street address in the Allpage directory: the assistant asks you first
  • Add an owner: only you can do it, on its screen
  • Remove an owner: only you can do it, on its screen
  • Open your business: only you can do it, on its screen
  • Close this business: the assistant can prepare it and you confirm it, twice
  • Delete this business: the assistant can prepare it and you confirm it, twice
  • Keep this business: the assistant can do it on its own
  • Change your web address: the assistant asks you first

For apps

Tools

  • business_updateProfile (Update your business details): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_updateAddress (Update your address): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_updateHours (Update your opening hours): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_updateServiceArea (Update your service area): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_useTool (Turn a tool on or off): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_setTimeZone (Change your time zone): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_saveLocation (Add or change a location): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • business_listInDirectory (List your business in the Allpage directory): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_showStreetInDirectory (Show your street address in the Allpage directory): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_open (Open your business): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • business_close (Close this business): waits for the owner to confirm it in Allpage, whatever they chose for your app
  • business_delete (Delete this business): waits for the owner to confirm it in Allpage, whatever they chose for your app
  • business_keep (Keep this business): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • business_rename (Change your web address): customers see it: waits for the owner’s approval unless they chose Just do it for your app

Reads

  • business_settings (See your business details at a glance)
  • business_details (About the business: what it does, where it is, its hours)
  • business_profile (See your business details as saved)
  • business_hours (See your opening hours)
  • business_capabilities (Check what your tools can use)
  • business_operation (Check how a task is going)
  • business_tools (See your tools)
  • business_owners (See who owns your businesses)
  • business_locations (See your locations)
  • business_summary (What’s going on)

Outside any one business

  • business_create (Start a business)
  • organizations_list (Your businesses)
  • account_get (Your account)
  • account_rename (Change your name)

Only the owner, in Allpage

  • Add an owner
  • Remove an owner

The owner’s screens

  • Settings (/settings)
  • Your tools (/tools)

Operations

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

account.get

Your account

Kind
Outside a business
Tool
account_get
Scope
account: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": {
            "name": {
              "type": "string"
            },
            "email": {
              "type": "string"
            },
            "businesses": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^biz_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A business id: biz_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "owner",
                      "staff"
                    ]
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "active",
                      "suspended",
                      "closed",
                      "purged"
                    ]
                  },
                  "stage": {
                    "type": "string",
                    "enum": [
                      "idea",
                      "launched"
                    ]
                  }
                },
                "required": [
                  "id",
                  "name",
                  "role",
                  "status",
                  "stage"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "name",
            "email",
            "businesses"
          ],
          "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": {}
    }
  ]
}

account.rename

Change your name

Kind
Outside a business
Tool
account_rename
Scope
account:write
Reached by
API, MCP

Runs right away, in the organization the app is connected to, outside any one business.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "label": "Name",
      "control": "text"
    }
  },
  "required": [
    "name"
  ],
  "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"
        }
      }
    }
  ]
}

business.capabilities

Check what your tools can use

Kind
Read
Tool
business_capabilities
Scope
business:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "module": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60
    }
  },
  "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",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "const": "available"
                  }
                },
                "required": [
                  "status"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "const": "fallback"
                  },
                  "reason": {
                    "type": "string"
                  },
                  "offer": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "href": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "title",
                          "href"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "command": {
                            "type": "string"
                          },
                          "input": {
                            "type": "object",
                            "propertyNames": {
                              "type": "string"
                            },
                            "additionalProperties": {}
                          }
                        },
                        "required": [
                          "title",
                          "command",
                          "input"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "required": [
                  "status",
                  "reason"
                ],
                "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": {}
    }
  ]
}

business.close

Close this business

Kind
Change
Tool
business_close
Scope
business:write
Reached by
API, MCP

waits for the owner to confirm it in Allpage, whatever they chose for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "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"
        }
      }
    }
  ]
}

business.create

Start a business

Kind
Outside a business
Tool
business_create
Scope
business:write
Reached by
API, MCP, ChatGPT

Runs right away, in the organization the app is connected to, outside any one business.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "stage": {
      "default": "starting",
      "description": "Where the owner is with it: idea (an idea to test, nothing to sell yet), starting (setting up a business) or open (running one today and moving it here). An idea gets no website draft and none of the tools for selling until business_open; name, kind and email are optional for it.",
      "type": "string",
      "enum": [
        "idea",
        "starting",
        "open"
      ]
    },
    "pitch": {
      "description": "The idea in the owner’s words, like \"mobile dog grooming in east Austin\". Needed for an idea with no name: its working name comes from the pitch’s first words.",
      "type": "string",
      "maxLength": 300
    },
    "name": {
      "description": "What the business is called. Needed unless stage is idea.",
      "type": "string",
      "maxLength": 80
    },
    "kind": {
      "description": "The kind of business, as website_starters lists it (massage, yoga, photographer, hair, barbershop, nails, trainer, music-teacher, baker, restaurant, counselor, cleaner, musician, pet-care, portfolio), or the kind planning_opportunities named. The website and the setup for that kind start from it; pick the closest, or portfolio when none fits: a simple website with no kind’s offerings or prices. Needed unless stage is idea.",
      "type": "string",
      "maxLength": 40
    },
    "location": {
      "description": "Where it is, like \"Austin, TX\": sets its time zone and is kept as the place it serves until it has an address.",
      "label": "Where",
      "type": "string",
      "maxLength": 120
    },
    "email": {
      "label": "Email",
      "control": "email",
      "description": "How customers reach the business by email. Needed unless stage is idea.",
      "type": "string",
      "maxLength": 320
    },
    "phone": {
      "label": "Phone",
      "control": "tel",
      "type": "string",
      "maxLength": 40
    },
    "description": {
      "default": "",
      "type": "string",
      "maxLength": 300
    },
    "services": {
      "description": "What the business sells and for how much, only as the owner said it. They become the options customers book first, with these prices, in place of the usual starting prices for its kind. Leave out what the owner didn’t say.",
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "priceMinor": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000,
            "description": "What it costs, in cents."
          },
          "minutes": {
            "description": "How long it takes, for something booked by time.",
            "type": "integer",
            "minimum": 5,
            "maximum": 720,
            "multipleOf": 5
          }
        },
        "required": [
          "name",
          "priceMinor"
        ],
        "additionalProperties": false
      }
    },
    "look": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "website": {
      "description": "Their own website, if they have one, for their profile.",
      "label": "Link",
      "control": "url",
      "type": "string",
      "maxLength": 300
    },
    "socials": {
      "description": "Their social accounts, as links. Never fetched.",
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "platform": {
            "type": "string",
            "enum": [
              "web",
              "instagram",
              "tiktok",
              "facebook",
              "youtube",
              "x",
              "threads",
              "bluesky",
              "linkedin",
              "pinterest",
              "yelp",
              "google",
              "tripadvisor",
              "spotify",
              "applemusic",
              "soundcloud",
              "bandcamp",
              "etsy",
              "substack",
              "whatsapp",
              "vimeo",
              "snapchat",
              "twitch",
              "telegram",
              "discord",
              "patreon",
              "kofi",
              "linktree",
              "behance",
              "dribbble",
              "github",
              "medium",
              "nextdoor",
              "airbnb",
              "venmo",
              "cashapp",
              "paypal"
            ]
          },
          "handle": {
            "type": "string",
            "maxLength": 60
          },
          "url": {
            "label": "Link",
            "control": "url",
            "type": "string",
            "maxLength": 2000
          }
        },
        "required": [
          "platform",
          "handle",
          "url"
        ],
        "additionalProperties": false
      }
    },
    "logoUrl": {
      "description": "Their logo image (https), for their files and website.",
      "label": "Link",
      "control": "url",
      "type": "string",
      "maxLength": 2000
    },
    "hours": {
      "description": "Their opening hours, only as the owner or their website gave them: schema.org openingHours text like \"Mo-Fr 09:00-17:00, Sa 10:00-14:00\", or 7 days of windows, Sunday first, in minutes from midnight ([[], [{\"start\": 540, \"end\": 1020}], …]). They become the business’s hours in its time zone. Leave them out when you don’t know them.",
      "anyOf": [
        {
          "minItems": 7,
          "maxItems": 7,
          "type": "array",
          "items": {
            "maxItems": 4,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "start": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1435,
                  "multipleOf": 5
                },
                "end": {
                  "type": "integer",
                  "minimum": 5,
                  "maximum": 2880,
                  "multipleOf": 5
                }
              },
              "required": [
                "start",
                "end"
              ],
              "additionalProperties": false
            }
          }
        },
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "maxItems": 14,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 200
          }
        }
      ]
    },
    "facts": {
      "description": "What the owner typed or their website said. Fills the description, place, phone and priced services left empty above.",
      "maxItems": 60,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string",
            "enum": [
              "typed",
              "website"
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "name",
              "kind",
              "website",
              "resource",
              "social",
              "email",
              "phone",
              "place",
              "service",
              "description"
            ]
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          },
          "minutes": {
            "type": "integer",
            "minimum": 5,
            "maximum": 1440,
            "multipleOf": 5
          },
          "price": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          }
        },
        "required": [
          "source",
          "kind",
          "value"
        ],
        "additionalProperties": false
      }
    },
    "inspiration": {
      "description": "Sites they like the look of. Only the look is used, when look is left out.",
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "url": {
            "label": "Link",
            "control": "url",
            "type": "string",
            "maxLength": 2000
          },
          "look": {
            "type": "object",
            "properties": {
              "themeColor": {
                "type": "string",
                "pattern": "^#(?:[0-9a-f]{3}|[0-9a-f]{6})$"
              },
              "fonts": {
                "maxItems": 6,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 80
                }
              },
              "dark": {
                "type": "boolean"
              },
              "photoLed": {
                "type": "boolean"
              }
            }
          }
        },
        "required": [
          "url"
        ],
        "additionalProperties": false
      }
    },
    "organizationId": {
      "type": "string",
      "pattern": "^org_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A organization id: org_ 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"
        }
      }
    }
  ]
}

business.delete

Delete this business

Kind
Change
Tool
business_delete
Scope
business:write
Reached by
API, MCP

waits for the owner to confirm it in Allpage, whatever they chose for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "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"
        }
      }
    }
  ]
}

business.details

About the business: what it does, where it is, its hours

Kind
Read
Tool
business_details
Scope
business: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": {
            "name": {
              "type": "string"
            },
            "details": {
              "type": "string",
              "description": "What it publishes about itself, as lines: empty for none."
            }
          },
          "required": [
            "name",
            "details"
          ],
          "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": {}
    }
  ]
}

business.hours

See your opening hours

Kind
Read
Tool
business_hours
Scope
business: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": {
            "timeZone": {
              "type": "string",
              "description": "The business’s time zone; every time is in it."
            },
            "zone": {
              "type": "string",
              "description": "Its everyday name, like \"Mountain Time\"."
            },
            "weekly": {
              "minItems": 7,
              "maxItems": 7,
              "type": "array",
              "items": {
                "maxItems": 4,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "start": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1435,
                      "multipleOf": 5
                    },
                    "end": {
                      "type": "integer",
                      "minimum": 5,
                      "maximum": 2880,
                      "multipleOf": 5
                    }
                  },
                  "required": [
                    "start",
                    "end"
                  ],
                  "additionalProperties": false
                }
              },
              "description": "Sunday (0) to Saturday (6), each day’s windows in minutes from midnight. Weekdays 9 to 5 until any are saved."
            },
            "exceptions": {
              "default": [],
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "date": {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                  },
                  "windows": {
                    "maxItems": 4,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "start": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1435,
                          "multipleOf": 5
                        },
                        "end": {
                          "type": "integer",
                          "minimum": 5,
                          "maximum": 2880,
                          "multipleOf": 5
                        }
                      },
                      "required": [
                        "start",
                        "end"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "label": {
                    "default": "",
                    "label": "Why",
                    "hint": "Holiday, special hours…",
                    "type": "string",
                    "maxLength": 60
                  }
                },
                "required": [
                  "date",
                  "windows",
                  "label"
                ],
                "additionalProperties": false
              }
            },
            "saved": {
              "type": "boolean",
              "description": "Whether the owner has saved hours yet."
            },
            "version": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "Pass it to business.updateHours with the whole hours."
            }
          },
          "required": [
            "timeZone",
            "zone",
            "weekly",
            "exceptions",
            "saved",
            "version"
          ],
          "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": {}
    }
  ]
}

business.keep

Keep this business

Kind
Change
Tool
business_keep
Scope
business: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": {},
  "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"
        }
      }
    }
  ]
}

business.listInDirectory

List your business in the Allpage directory

Kind
Change
Tool
business_listInDirectory
Scope
business: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": {
    "listed": {
      "type": "boolean",
      "description": "true keeps the business in the Allpage directory under its kind and city (the default, once its details are complete); false takes it out everywhere."
    }
  },
  "required": [
    "listed"
  ],
  "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"
        }
      }
    }
  ]
}

business.locations

See your locations

Kind
Read
Tool
business_locations
Scope
business: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": {
            "locations": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^loc_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A location id: loc_ and 26 letters and digits."
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "place",
                      "venue",
                      "online"
                    ]
                  },
                  "name": {
                    "type": "string"
                  },
                  "primary": {
                    "type": "boolean"
                  },
                  "timeZone": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "kind",
                  "name",
                  "primary",
                  "timeZone"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "locations"
          ],
          "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": {}
    }
  ]
}

business.open

Open your business

Kind
Change
Tool
business_open
Scope
business: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": {
    "kind": {
      "description": "The kind of business, as website_starters lists it. Leave it out to use the kind the business already has, or portfolio when it has none.",
      "type": "string",
      "maxLength": 40
    },
    "name": {
      "description": "What the business is called, if it changes as it opens.",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "services": {
      "description": "What the business sells and for how much, only as the owner said it. They become what customers book first, at these prices, in place of the usual starting prices for its kind. Leave out what the owner didn’t say.",
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "priceMinor": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000,
            "description": "What it costs, in cents."
          },
          "minutes": {
            "description": "How long it takes, for something booked by time.",
            "type": "integer",
            "minimum": 5,
            "maximum": 720,
            "multipleOf": 5
          }
        },
        "required": [
          "name",
          "priceMinor"
        ],
        "additionalProperties": false
      }
    },
    "look": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "logoUrl": {
      "description": "Their logo image (https), for their files and website.",
      "label": "Link",
      "control": "url",
      "type": "string",
      "maxLength": 2000
    }
  },
  "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"
        }
      }
    }
  ]
}

business.operation

Check how a task is going

Kind
Read
Tool
business_operation
Scope
business:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "pattern": "^pnd_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A pending operation id: pnd_ and 26 letters and digits."
    }
  },
  "required": [
    "operationId"
  ],
  "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": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "operationId": {
                  "type": "string"
                },
                "command": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "running",
                    "done",
                    "failed"
                  ]
                },
                "progress": {
                  "type": "object",
                  "properties": {
                    "done": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "total": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "done"
                  ],
                  "additionalProperties": false
                },
                "message": {
                  "type": "string"
                },
                "result": {},
                "startedAt": {
                  "type": "string"
                },
                "finishedAt": {
                  "type": "string"
                }
              },
              "required": [
                "operationId",
                "command",
                "status",
                "progress",
                "message",
                "startedAt"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "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": {}
    }
  ]
}

business.owners

See who owns your businesses

Kind
Read
Tool
business_owners
Scope
business: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": {
            "owners": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "personId": {
                    "type": "string",
                    "pattern": "^per_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A person id: per_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "you": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "personId",
                  "name",
                  "email",
                  "you"
                ],
                "additionalProperties": false
              }
            },
            "businesses": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "canManage": {
              "type": "boolean"
            }
          },
          "required": [
            "owners",
            "businesses",
            "canManage"
          ],
          "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": {}
    }
  ]
}

business.profile

See your business details as saved

Kind
Read
Tool
business_profile
Scope
business: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": {
            "data": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "displayName": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 80,
                      "label": "Business name"
                    },
                    "legalName": {
                      "default": "",
                      "label": "Legal name",
                      "hint": "If it’s different, for receipts and payments.",
                      "type": "string",
                      "maxLength": 120
                    },
                    "entity": {
                      "label": "Business type",
                      "type": "string",
                      "enum": [
                        "sole_proprietor",
                        "llc",
                        "corporation",
                        "partnership",
                        "nonprofit"
                      ]
                    },
                    "ein": {
                      "label": "EIN",
                      "hint": "Speeds up texting and payments setup."
                    },
                    "stage": {
                      "label": "Stage",
                      "type": "string",
                      "enum": [
                        "idea",
                        "launched"
                      ]
                    },
                    "formationState": {
                      "label": "State of formation"
                    },
                    "registeredAgent": {
                      "label": "Registered agent",
                      "type": "string",
                      "maxLength": 120
                    },
                    "tagline": {
                      "default": "",
                      "label": "One line about you",
                      "type": "string",
                      "maxLength": 120
                    },
                    "description": {
                      "default": "",
                      "label": "About",
                      "control": "textarea",
                      "type": "string",
                      "maxLength": 2000
                    },
                    "categories": {
                      "default": [],
                      "label": "What kind of business",
                      "maxItems": 5,
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "yoga_studio",
                          "barber_shop",
                          "hair_salon",
                          "massage_therapist",
                          "personal_trainer",
                          "restaurant",
                          "cafe",
                          "bakery",
                          "photographer",
                          "music_teacher",
                          "counselor",
                          "house_cleaning",
                          "pet_groomer",
                          "dog_walker",
                          "musician",
                          "nail_salon",
                          "art_center",
                          "pottery_studio",
                          "camp",
                          "gym",
                          "retreat"
                        ]
                      }
                    },
                    "phone": {
                      "label": "Phone",
                      "control": "tel"
                    },
                    "email": {
                      "label": "Email",
                      "control": "email"
                    },
                    "website": {
                      "label": "Other website",
                      "control": "url"
                    },
                    "socials": {
                      "default": [],
                      "label": "Social profiles",
                      "maxItems": 10,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "network": {
                            "type": "string",
                            "enum": [
                              "instagram",
                              "facebook",
                              "tiktok",
                              "youtube",
                              "x",
                              "linkedin",
                              "pinterest",
                              "threads",
                              "yelp"
                            ]
                          },
                          "url": {
                            "label": "Link",
                            "control": "url"
                          }
                        },
                        "required": [
                          "network",
                          "url"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "currency": {
                      "default": "usd",
                      "type": "string",
                      "const": "usd"
                    }
                  },
                  "required": [
                    "displayName",
                    "legalName",
                    "tagline",
                    "description",
                    "categories",
                    "socials",
                    "currency"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ],
              "description": "The saved details; null before any are saved."
            },
            "version": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "Pass it to business.updateProfile with the whole details."
            }
          },
          "required": [
            "data",
            "version"
          ],
          "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": {}
    }
  ]
}

business.rename

Change your web address

Kind
Change
Tool
business_rename
Scope
business: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": {
    "handle": {
      "type": "string",
      "label": "Web address"
    }
  },
  "required": [
    "handle"
  ],
  "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"
        }
      }
    }
  ]
}

business.saveLocation

Add or change a location

Kind
Change
Tool
business_saveLocation
Scope
business: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": {
    "locationId": {
      "type": "string",
      "pattern": "^loc_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A location id: loc_ and 26 letters and digits."
    },
    "kind": {
      "type": "string",
      "enum": [
        "place",
        "venue",
        "online"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "timeZone": {
      "type": "string",
      "maxLength": 80,
      "label": "Time zone"
    },
    "address": {
      "type": "object",
      "properties": {
        "line1": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120,
          "label": "Street address"
        },
        "line2": {
          "default": "",
          "label": "Suite or unit",
          "type": "string",
          "maxLength": 120
        },
        "city": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80,
          "label": "City"
        },
        "region": {
          "label": "State",
          "type": "string",
          "maxLength": 40
        },
        "postalCode": {
          "label": "ZIP code",
          "type": "string",
          "maxLength": 20
        },
        "country": {
          "default": "US",
          "type": "string",
          "const": "US"
        },
        "geo": {
          "type": "object",
          "properties": {
            "lat": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "lng": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          },
          "required": [
            "lat",
            "lng"
          ],
          "additionalProperties": false
        },
        "placeId": {
          "type": "string",
          "maxLength": 200
        },
        "checked": {
          "type": "boolean"
        },
        "timeZone": {
          "type": "string",
          "maxLength": 64
        },
        "showStreet": {
          "default": true,
          "label": "Show the street address",
          "type": "boolean"
        }
      },
      "required": [
        "line1",
        "city",
        "region"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "kind",
    "name"
  ],
  "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"
        }
      }
    }
  ]
}

business.setTimeZone

Change your time zone

Kind
Change
Tool
business_setTimeZone
Scope
business: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": {
    "timeZone": {
      "type": "string",
      "maxLength": 80,
      "description": "The business’s new IANA time zone, like \"America/Los_Angeles\". Every time it shows moves to it."
    }
  },
  "required": [
    "timeZone"
  ],
  "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"
        }
      }
    }
  ]
}

business.settings

See your business details at a glance

Kind
Read
Tool
business_settings
Scope
business: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": {
            "name": {
              "type": "string"
            },
            "reach": {
              "type": [
                "string",
                "null"
              ]
            },
            "timeZone": {
              "type": "string"
            },
            "openDays": {
              "type": [
                "number",
                "null"
              ]
            },
            "address": {
              "type": [
                "string",
                "null"
              ]
            },
            "mode": {
              "type": "string",
              "enum": [
                "storefront",
                "mobile",
                "both"
              ]
            },
            "places": {
              "type": "number"
            }
          },
          "required": [
            "name",
            "reach",
            "timeZone",
            "openDays",
            "address",
            "mode",
            "places"
          ],
          "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": {}
    }
  ]
}

business.showStreetInDirectory

Show your street address in the Allpage directory

Kind
Change
Tool
business_showStreetInDirectory
Scope
business: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": {
    "show": {
      "type": "boolean",
      "description": "true shows the street address on the listing; false shows only the city and area."
    }
  },
  "required": [
    "show"
  ],
  "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"
        }
      }
    }
  ]
}

business.summary

What’s going on

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

business.tools

See your tools

Kind
Read
Tool
business_tools
Scope
business: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": {
            "tools": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "module": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "purpose": {
                    "type": "string"
                  },
                  "state": {
                    "type": "string",
                    "enum": [
                      "on",
                      "off",
                      "turning_off"
                    ]
                  },
                  "canChange": {
                    "type": "boolean"
                  },
                  "lock": {
                    "type": "object",
                    "properties": {
                      "reason": {
                        "type": "string"
                      },
                      "offer": {
                        "type": "object",
                        "properties": {
                          "title": {
                            "type": "string"
                          },
                          "href": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "title",
                          "href"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "reason"
                    ],
                    "additionalProperties": false
                  },
                  "needs": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "takesDown": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "optionsHref": {
                    "type": "string"
                  }
                },
                "required": [
                  "module",
                  "title",
                  "purpose",
                  "state",
                  "canChange",
                  "needs",
                  "takesDown"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "tools"
          ],
          "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": {}
    }
  ]
}

business.updateAddress

Update your address

Kind
Change
Tool
business_updateAddress
Scope
business: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": {
    "data": {
      "type": "object",
      "properties": {
        "line1": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120,
          "label": "Street address"
        },
        "line2": {
          "default": "",
          "label": "Suite or unit",
          "type": "string",
          "maxLength": 120
        },
        "city": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80,
          "label": "City"
        },
        "region": {
          "label": "State",
          "type": "string",
          "maxLength": 40
        },
        "postalCode": {
          "label": "ZIP code",
          "type": "string",
          "maxLength": 20
        },
        "country": {
          "default": "US",
          "type": "string",
          "const": "US"
        },
        "geo": {
          "type": "object",
          "properties": {
            "lat": {
              "type": "number",
              "minimum": -90,
              "maximum": 90
            },
            "lng": {
              "type": "number",
              "minimum": -180,
              "maximum": 180
            }
          },
          "required": [
            "lat",
            "lng"
          ],
          "additionalProperties": false
        },
        "placeId": {
          "type": "string",
          "maxLength": 200
        },
        "checked": {
          "type": "boolean"
        },
        "timeZone": {
          "type": "string",
          "maxLength": 64
        },
        "showStreet": {
          "default": true,
          "label": "Show the street address",
          "type": "boolean"
        }
      },
      "required": [
        "line1",
        "city",
        "region"
      ],
      "additionalProperties": false
    },
    "version": {
      "description": "The version you read, so a change made since is a conflict instead of lost; 0 saves only if there’s none yet.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "data"
  ],
  "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"
        }
      }
    }
  ]
}

business.updateHours

Update your opening hours

Kind
Change
Tool
business_updateHours
Scope
business: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": {
    "data": {
      "type": "object",
      "properties": {
        "timeZone": {
          "type": "string",
          "maxLength": 80,
          "label": "Time zone"
        },
        "weekly": {
          "minItems": 7,
          "maxItems": 7,
          "type": "array",
          "items": {
            "maxItems": 4,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "start": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1435,
                  "multipleOf": 5
                },
                "end": {
                  "type": "integer",
                  "minimum": 5,
                  "maximum": 2880,
                  "multipleOf": 5
                }
              },
              "required": [
                "start",
                "end"
              ],
              "additionalProperties": false
            }
          }
        },
        "exceptions": {
          "default": [],
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "date": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              "windows": {
                "maxItems": 4,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "start": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1435,
                      "multipleOf": 5
                    },
                    "end": {
                      "type": "integer",
                      "minimum": 5,
                      "maximum": 2880,
                      "multipleOf": 5
                    }
                  },
                  "required": [
                    "start",
                    "end"
                  ],
                  "additionalProperties": false
                }
              },
              "label": {
                "default": "",
                "label": "Why",
                "hint": "Holiday, special hours…",
                "type": "string",
                "maxLength": 60
              }
            },
            "required": [
              "date",
              "windows"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "timeZone",
        "weekly"
      ],
      "additionalProperties": false
    },
    "version": {
      "description": "The version you read, so a change made since is a conflict instead of lost; 0 saves only if there’s none yet.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "data"
  ],
  "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"
        }
      }
    }
  ]
}

business.updateProfile

Update your business details

Kind
Change
Tool
business_updateProfile
Scope
business: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": {
    "data": {
      "type": "object",
      "properties": {
        "displayName": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80,
          "label": "Business name"
        },
        "legalName": {
          "default": "",
          "label": "Legal name",
          "hint": "If it’s different, for receipts and payments.",
          "type": "string",
          "maxLength": 120
        },
        "entity": {
          "label": "Business type",
          "type": "string",
          "enum": [
            "sole_proprietor",
            "llc",
            "corporation",
            "partnership",
            "nonprofit"
          ]
        },
        "ein": {
          "label": "EIN",
          "hint": "Speeds up texting and payments setup.",
          "type": "string",
          "maxLength": 20
        },
        "stage": {
          "label": "Stage",
          "type": "string",
          "enum": [
            "idea",
            "launched"
          ]
        },
        "formationState": {
          "label": "State of formation",
          "type": "string",
          "maxLength": 40
        },
        "registeredAgent": {
          "label": "Registered agent",
          "type": "string",
          "maxLength": 120
        },
        "tagline": {
          "default": "",
          "label": "One line about you",
          "type": "string",
          "maxLength": 120
        },
        "description": {
          "default": "",
          "label": "About",
          "control": "textarea",
          "type": "string",
          "maxLength": 2000
        },
        "categories": {
          "default": [],
          "label": "What kind of business",
          "maxItems": 5,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "yoga_studio",
              "barber_shop",
              "hair_salon",
              "massage_therapist",
              "personal_trainer",
              "restaurant",
              "cafe",
              "bakery",
              "photographer",
              "music_teacher",
              "counselor",
              "house_cleaning",
              "pet_groomer",
              "dog_walker",
              "musician",
              "nail_salon",
              "art_center",
              "pottery_studio",
              "camp",
              "gym",
              "retreat"
            ]
          }
        },
        "phone": {
          "label": "Phone",
          "control": "tel",
          "type": "string"
        },
        "email": {
          "label": "Email",
          "control": "email",
          "type": "string",
          "maxLength": 320
        },
        "website": {
          "label": "Other website",
          "control": "url",
          "type": "string"
        },
        "socials": {
          "label": "Social profiles",
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "network": {
                "type": "string",
                "enum": [
                  "instagram",
                  "facebook",
                  "tiktok",
                  "youtube",
                  "x",
                  "linkedin",
                  "pinterest",
                  "threads",
                  "yelp"
                ]
              },
              "url": {
                "label": "Link",
                "control": "url",
                "type": "string",
                "maxLength": 300
              }
            },
            "required": [
              "network",
              "url"
            ],
            "additionalProperties": false
          }
        },
        "currency": {
          "default": "usd",
          "type": "string",
          "const": "usd"
        }
      },
      "required": [
        "displayName"
      ],
      "additionalProperties": false
    },
    "version": {
      "description": "The version you read, so a change made since is a conflict instead of lost; 0 saves only if there’s none yet.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "data"
  ],
  "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"
        }
      }
    }
  ]
}

business.updateServiceArea

Update your service area

Kind
Change
Tool
business_updateServiceArea
Scope
business: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": {
    "data": {
      "type": "object",
      "properties": {
        "mode": {
          "default": "storefront",
          "label": "Where you work",
          "options": {
            "storefront": "Customers come to me",
            "mobile": "I go to customers",
            "both": "Both"
          },
          "type": "string",
          "enum": [
            "storefront",
            "mobile",
            "both"
          ]
        },
        "places": {
          "default": [],
          "label": "Towns and neighborhoods",
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "minLength": 1,
                "maxLength": 80
              },
              "placeId": {
                "type": "string",
                "maxLength": 200
              },
              "geo": {
                "type": "object",
                "properties": {
                  "lat": {
                    "type": "number",
                    "minimum": -90,
                    "maximum": 90
                  },
                  "lng": {
                    "type": "number",
                    "minimum": -180,
                    "maximum": 180
                  }
                },
                "required": [
                  "lat",
                  "lng"
                ],
                "additionalProperties": false
              },
              "checked": {
                "type": "boolean"
              }
            },
            "required": [
              "name"
            ],
            "additionalProperties": false
          }
        },
        "radiusMiles": {
          "label": "How far you travel (miles)",
          "type": "integer",
          "minimum": 1,
          "maximum": 200
        }
      },
      "additionalProperties": false
    },
    "version": {
      "description": "The version you read, so a change made since is a conflict instead of lost; 0 saves only if there’s none yet.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "data"
  ],
  "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"
        }
      }
    }
  ]
}

business.useTool

Turn a tool on or off

Kind
Change
Tool
business_useTool
Scope
business: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": {
    "module": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60
    },
    "on": {
      "type": "boolean"
    },
    "confirm": {
      "description": "The owner saw which other tools turn on or off with it and said yes.",
      "type": "boolean"
    }
  },
  "required": [
    "module",
    "on"
  ],
  "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"
        }
      }
    }
  ]
}

organizations.list

Your businesses

Kind
Outside a business
Tool
organizations_list
Scope
organizations: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": {
            "organizations": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^org_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A organization id: org_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "personal": {
                    "type": "boolean"
                  },
                  "role": {
                    "type": "string",
                    "enum": [
                      "owner",
                      "member"
                    ]
                  },
                  "businesses": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^biz_[0-9a-hjkmnp-tv-z]{26}$",
                          "description": "A business id: biz_ and 26 letters and digits."
                        },
                        "name": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "suspended",
                            "closed",
                            "purged"
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "status"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "id",
                  "name",
                  "personal",
                  "role",
                  "businesses"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "organizations"
          ],
          "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": {}
    }
  ]
}