Browse the docs

Business plan

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

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

Screens

  • Business plan (/business-plan)

What you can do

  • Research your market: the assistant can do it on its own
  • Change your business plan: the assistant can do it on its own
  • Keep what you wrote in your business plan: the assistant can do it on its own
  • Go back to an earlier business plan: the assistant can do it on its own
  • Suggest names for your business: the assistant can do it on its own
  • Pick your business’s name: the assistant asks you first
  • Make a waitlist page: the assistant asks you first

For apps

Tools

  • planning_research (Research your market): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • planning_update (Change your business plan): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • planning_skipProposals (Keep what you wrote in your business plan): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • planning_restore (Go back to an earlier business plan): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • planning_names (Suggest names for your business): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • planning_pickName (Pick your business’s name): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • planning_waitlist (Make a waitlist page): customers see it: waits for the owner’s approval unless they chose Just do it for your app

Reads

  • planning_read (Your business plan)
  • planning_history (Your business plan’s history)
  • planning_signups (Your waitlist)
  • planning_summary (What’s going on)

The owner’s screens

  • Business plan (/business-plan)

Operations

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

planning.checkNames

Check whether business names are free

Kind
Anyone, before signing in
Tool
planning_checkNames
Scope
public
Reached by
MCP, ChatGPT

Read-only. Works before signing in, with a limit per caller.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "names": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      },
      "description": "The names to check, like [\"Juniper Paws\", \"Mile High Walks\"]."
    }
  },
  "required": [
    "names"
  ],
  "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": {
            "names": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "domain": {
                    "type": "object",
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "available",
                          "taken",
                          "unknown"
                        ]
                      }
                    },
                    "required": [
                      "domain",
                      "status"
                    ],
                    "additionalProperties": false
                  },
                  "handles": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "network": {
                          "type": "string",
                          "enum": [
                            "instagram",
                            "tiktok"
                          ]
                        },
                        "handle": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "available",
                            "taken",
                            "unknown"
                          ]
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "network",
                        "handle",
                        "status",
                        "url"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "name",
                  "domain",
                  "handles"
                ],
                "additionalProperties": false
              }
            },
            "note": {
              "type": "string"
            }
          },
          "required": [
            "names",
            "note"
          ],
          "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": {}
    }
  ]
}

planning.history

Your business plan’s history

Kind
Read
Tool
planning_history
Scope
planning: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": {
            "versions": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^plv_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A plan version id: plv_ and 26 letters and digits."
                  },
                  "version": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "label": {
                    "type": "string"
                  },
                  "createdAt": {
                    "type": "string",
                    "format": "date-time"
                  }
                },
                "required": [
                  "id",
                  "version",
                  "label",
                  "createdAt"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "versions"
          ],
          "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": {}
    }
  ]
}

planning.names

Suggest names for your business

Kind
Change
Tool
planning_names
Scope
planning: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": {
    "hint": {
      "description": "Anything the name should be or suggest: \"short, warm, not my own name\".",
      "type": "string",
      "maxLength": 200
    },
    "names": {
      "minItems": 1,
      "maxItems": 16,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60,
            "description": "The name."
          },
          "why": {
            "default": "",
            "description": "Why it fits, in one short line.",
            "type": "string",
            "maxLength": 200
          }
        },
        "required": [
          "name",
          "why"
        ]
      },
      "description": "Names you came up with, each with why it fits: Allpage checks where each is free and doesn’t suggest its own. Left out, Allpage suggests names, which spends AI credits."
    }
  },
  "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"
        }
      }
    }
  ]
}

planning.opportunities

Find kinds of business that fit someone

Kind
Anyone, before signing in
Tool
planning_opportunities
Scope
public
Reached by
MCP, ChatGPT

Read-only. Works before signing in, with a limit per caller.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "interests": {
      "description": "What they like, are good at or have done, in their words: \"I like dogs and being outside\".",
      "type": "string",
      "maxLength": 300
    },
    "budgetUsd": {
      "description": "What they can put in to start, in US dollars: 2000.",
      "type": "number",
      "minimum": 0,
      "maximum": 10000000
    },
    "hoursPerWeek": {
      "description": "How many hours a week they can give it.",
      "type": "number",
      "minimum": 1,
      "maximum": 100
    },
    "place": {
      "description": "Where, as a city and state (\"Denver, CO\"): brings the licenses each kind typically needs there.",
      "type": "string",
      "maxLength": 120
    },
    "limit": {
      "description": "How many kinds to return; 3 by default.",
      "type": "integer",
      "minimum": 1,
      "maximum": 12
    }
  },
  "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": {
            "opportunities": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "description": "The kind to start it with: business_create’s kind."
                  },
                  "name": {
                    "type": "string"
                  },
                  "category": {
                    "type": "string",
                    "description": "Its kind for licenses_checklist; its name in words for directory_market."
                  },
                  "fit": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Why it fits them."
                  },
                  "watchOut": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "What to weigh against it."
                  },
                  "startup": {
                    "type": "object",
                    "properties": {
                      "costLowUsd": {
                        "type": "number"
                      },
                      "costHighUsd": {
                        "type": "number"
                      },
                      "needs": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      },
                      "partTime": {
                        "type": "boolean"
                      },
                      "licensed": {
                        "type": "boolean",
                        "description": "The work usually needs a state license."
                      },
                      "pricing": {
                        "type": "string",
                        "description": "How businesses like it charge."
                      },
                      "risks": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "required": [
                      "costLowUsd",
                      "costHighUsd",
                      "needs",
                      "partTime",
                      "licensed",
                      "pricing",
                      "risks"
                    ],
                    "additionalProperties": false,
                    "description": "What starting it typically takes: rough ranges to check locally."
                  },
                  "licenses": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "items": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "title": {
                                  "type": "string"
                                },
                                "authority": {
                                  "type": "string"
                                },
                                "url": {
                                  "type": "string"
                                },
                                "level": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "title",
                                "authority",
                                "url",
                                "level"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "notCovered": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "required": [
                          "items",
                          "notCovered"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "The licenses and permits it typically needs where they live; null without a city and state."
                  }
                },
                "required": [
                  "kind",
                  "name",
                  "category",
                  "fit",
                  "watchOut",
                  "startup",
                  "licenses"
                ],
                "additionalProperties": false
              }
            },
            "disclaimer": {
              "type": "string",
              "description": "Give it with anything about licenses, permits or insurance."
            },
            "note": {
              "type": "string"
            },
            "next": {
              "type": "string",
              "description": "What to offer next."
            }
          },
          "required": [
            "opportunities",
            "disclaimer",
            "note",
            "next"
          ],
          "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": {}
    }
  ]
}

planning.pickName

Pick your business’s name

Kind
Change
Tool
planning_pickName
Scope
planning: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": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    }
  },
  "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"
        }
      }
    }
  ]
}

planning.read

Your business plan

Kind
Read
Tool
planning_read
Scope
planning: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": {
            "plan": {
              "type": "object",
              "properties": {
                "summary": {
                  "type": "string",
                  "maxLength": 900,
                  "description": "The business in two or three sentences: what it sells, to whom, where."
                },
                "customers": {},
                "market": {
                  "type": "object",
                  "properties": {
                    "demand": {
                      "type": "string",
                      "maxLength": 800,
                      "description": "How to tell people want it, and the cheapest way to test that."
                    },
                    "competition": {
                      "type": "string",
                      "maxLength": 800,
                      "description": "What it competes with, in general terms, never named businesses."
                    }
                  },
                  "required": [
                    "demand",
                    "competition"
                  ],
                  "additionalProperties": false,
                  "description": "Demand and competition."
                },
                "offer": {
                  "type": "object",
                  "properties": {
                    "what": {
                      "type": "string",
                      "maxLength": 800,
                      "description": "What customers buy."
                    },
                    "pricing": {
                      "type": "string",
                      "maxLength": 700,
                      "description": "What to charge and why, as a rough range to check."
                    },
                    "compare": {
                      "type": "string",
                      "maxLength": 700,
                      "description": "How it compares with the alternatives."
                    }
                  },
                  "required": [
                    "what",
                    "pricing",
                    "compare"
                  ],
                  "additionalProperties": false,
                  "description": "What customers buy, what to charge and how it compares."
                },
                "positioning": {
                  "type": "string",
                  "maxLength": 400,
                  "description": "Why customers pick this business, in one or two lines."
                },
                "channels": {},
                "goals": {},
                "checks": {},
                "risks": {},
                "nextSteps": {}
              },
              "required": [
                "summary",
                "customers",
                "market",
                "offer",
                "positioning",
                "channels",
                "goals",
                "checks",
                "risks",
                "nextSteps"
              ],
              "additionalProperties": false
            },
            "version": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "Send it back with planning_update; 0 before anything is saved."
            },
            "sources": {
              "type": "object",
              "propertyNames": {
                "type": "string",
                "enum": [
                  "summary",
                  "customers",
                  "market",
                  "offer",
                  "positioning",
                  "channels",
                  "goals",
                  "checks",
                  "risks",
                  "nextSteps"
                ]
              },
              "additionalProperties": {
                "type": "object",
                "properties": {
                  "source": {
                    "type": "string",
                    "enum": [
                      "owner",
                      "website",
                      "research",
                      "assistant"
                    ]
                  },
                  "updatedAt": {
                    "type": "string"
                  }
                },
                "required": [
                  "source",
                  "updatedAt"
                ],
                "additionalProperties": false
              },
              "description": "Who wrote each section (owner, website, research or assistant) and when. Research never overwrites what the owner wrote."
            },
            "updatedAt": {
              "type": [
                "string",
                "null"
              ]
            },
            "freeResearch": {
              "type": "object",
              "properties": {
                "free": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991,
                  "description": "Free research runs the account gets, across its businesses."
                },
                "left": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991,
                  "description": "Free runs left; after them, Allpage’s research uses AI credits."
                },
                "capped": {
                  "type": "boolean",
                  "description": "The plan allows no more of Allpage’s own research; research you write is still saved."
                },
                "signIn": {
                  "type": "boolean",
                  "description": "Nobody has kept this business yet: Allpage’s own research starts once they sign in and keep it."
                }
              },
              "required": [
                "free",
                "left",
                "capped",
                "signIn"
              ],
              "additionalProperties": false,
              "description": "Allpage’s own research is free for the first few runs, then uses AI credits. Research you write yourself is always free."
            },
            "proposals": {
              "type": "object",
              "properties": {
                "summary": {
                  "type": "string",
                  "maxLength": 900,
                  "description": "The business in two or three sentences: what it sells, to whom, where."
                },
                "customers": {},
                "market": {
                  "type": "object",
                  "properties": {
                    "demand": {
                      "type": "string",
                      "maxLength": 800,
                      "description": "How to tell people want it, and the cheapest way to test that."
                    },
                    "competition": {
                      "type": "string",
                      "maxLength": 800,
                      "description": "What it competes with, in general terms, never named businesses."
                    }
                  },
                  "required": [
                    "demand",
                    "competition"
                  ],
                  "additionalProperties": false,
                  "description": "Demand and competition."
                },
                "offer": {
                  "type": "object",
                  "properties": {
                    "what": {
                      "type": "string",
                      "maxLength": 800,
                      "description": "What customers buy."
                    },
                    "pricing": {
                      "type": "string",
                      "maxLength": 700,
                      "description": "What to charge and why, as a rough range to check."
                    },
                    "compare": {
                      "type": "string",
                      "maxLength": 700,
                      "description": "How it compares with the alternatives."
                    }
                  },
                  "required": [
                    "what",
                    "pricing",
                    "compare"
                  ],
                  "additionalProperties": false,
                  "description": "What customers buy, what to charge and how it compares."
                },
                "positioning": {
                  "type": "string",
                  "maxLength": 400,
                  "description": "Why customers pick this business, in one or two lines."
                },
                "channels": {},
                "goals": {},
                "checks": {},
                "risks": {},
                "nextSteps": {}
              },
              "additionalProperties": false,
              "description": "What the last research suggests for sections the owner wrote. Nothing is changed until they’re saved with planning_update."
            },
            "suggested": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string"
                    },
                    "tone": {
                      "type": "string",
                      "enum": [
                        "warm",
                        "direct",
                        "neutral"
                      ]
                    },
                    "goals": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "what": {
                            "type": "string"
                          },
                          "target": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "what",
                          "target"
                        ],
                        "additionalProperties": false
                      }
                    }
                  },
                  "required": [
                    "kind",
                    "tone"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ],
              "description": "From the last research: the closest kind of business, how it should sound and goals to suggest."
            },
            "researching": {
              "description": "While Allpage researches the market, the task to read with business_operation; null otherwise.",
              "type": [
                "string",
                "null"
              ]
            },
            "names": {
              "maxItems": 12,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "maxLength": 60
                  },
                  "why": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "domain": {
                    "type": "object",
                    "properties": {
                      "domain": {
                        "type": "string"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "available",
                          "taken",
                          "unknown"
                        ]
                      }
                    },
                    "required": [
                      "domain",
                      "status"
                    ],
                    "additionalProperties": false
                  },
                  "handles": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "network": {
                          "type": "string",
                          "enum": [
                            "instagram",
                            "tiktok"
                          ]
                        },
                        "handle": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "available",
                            "taken",
                            "unknown"
                          ]
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "network",
                        "handle",
                        "status",
                        "url"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "name",
                  "why",
                  "domain",
                  "handles"
                ],
                "additionalProperties": false
              }
            },
            "waitlist": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "maxLength": 80
                    },
                    "headline": {
                      "type": "string",
                      "maxLength": 120
                    },
                    "blurb": {
                      "type": "string",
                      "maxLength": 400
                    },
                    "open": {
                      "type": "boolean"
                    },
                    "siteUrl": {
                      "default": null,
                      "anyOf": [
                        {
                          "type": "string",
                          "maxLength": 300
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "url": {
                      "type": "string",
                      "description": "The public page."
                    },
                    "signups": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "How many people joined it."
                    }
                  },
                  "required": [
                    "name",
                    "headline",
                    "blurb",
                    "open",
                    "siteUrl",
                    "url",
                    "signups"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "disclaimer": {
              "type": "string",
              "description": "Give it with anything about licenses, permits or tax."
            }
          },
          "required": [
            "plan",
            "version",
            "sources",
            "updatedAt",
            "freeResearch",
            "proposals",
            "suggested",
            "researching",
            "names",
            "waitlist",
            "disclaimer"
          ],
          "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": {}
    }
  ]
}

planning.research

Research your market

Kind
Change
Tool
planning_research
Scope
planning: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": {
    "context": {
      "type": "string",
      "maxLength": 600,
      "description": "Facts the owner already gave, one per line: what they do, where, what they sell and for how much, their website and socials."
    },
    "research": {
      "type": "object",
      "properties": {
        "summary": {
          "type": "string",
          "maxLength": 900,
          "description": "The business in two or three sentences: what it sells, to whom, where."
        },
        "customers": {
          "maxItems": 8,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 60,
                "description": "A short name for this kind of customer: \"New parents\"."
              },
              "who": {
                "type": "string",
                "maxLength": 300,
                "description": "Who they are, in a sentence."
              },
              "needs": {
                "type": "string",
                "maxLength": 300,
                "description": "What they need from the business."
              },
              "findsYou": {
                "type": "string",
                "maxLength": 300,
                "description": "Where they look for a business like this."
              },
              "pays": {
                "type": "string",
                "maxLength": 200,
                "description": "What they typically pay, as a rough range to check."
              },
              "objections": {
                "type": "string",
                "maxLength": 300,
                "description": "What stops them from buying."
              }
            },
            "required": [
              "name",
              "who",
              "needs",
              "findsYou",
              "pays",
              "objections"
            ]
          },
          "description": "2 to 4 kinds of customer, the likeliest first."
        },
        "market": {
          "type": "object",
          "properties": {
            "demand": {
              "type": "string",
              "maxLength": 800,
              "description": "How to tell people want it, and the cheapest way to test that."
            },
            "competition": {
              "type": "string",
              "maxLength": 800,
              "description": "What it competes with, in general terms, never named businesses."
            }
          },
          "required": [
            "demand",
            "competition"
          ],
          "description": "Demand and competition."
        },
        "offer": {
          "type": "object",
          "properties": {
            "what": {
              "type": "string",
              "maxLength": 800,
              "description": "What customers buy."
            },
            "pricing": {
              "type": "string",
              "maxLength": 700,
              "description": "What to charge and why, as a rough range to check."
            },
            "compare": {
              "type": "string",
              "maxLength": 700,
              "description": "How it compares with the alternatives."
            }
          },
          "required": [
            "what",
            "pricing",
            "compare"
          ],
          "description": "What customers buy, what to charge and how it compares."
        },
        "positioning": {
          "type": "string",
          "maxLength": 400,
          "description": "Why customers pick this business, in one or two lines."
        },
        "channels": {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 200
          },
          "description": "Where the first customers come from. Up to 6, each one short line."
        },
        "checks": {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 240
          },
          "description": "Licenses, permits, registrations, insurance and taxes businesses like this typically look into, each as something to confirm with the agency that issues it. Up to 6, each one short line."
        },
        "risks": {
          "maxItems": 9,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 240
          },
          "description": "What could go wrong. Up to 5, each one short line."
        },
        "nextSteps": {
          "maxItems": 7,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 240
          },
          "description": "The next three things to do, in order: the first real customers soonest, spending as little as possible. Up to 3, each one short line."
        },
        "goals": {
          "maxItems": 8,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "what": {
                "type": "string",
                "maxLength": 120,
                "description": "What to count: \"Bookings a week\", \"Monthly revenue in $\"."
              },
              "target": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000,
                "description": "The number to reach."
              }
            },
            "required": [
              "what",
              "target"
            ]
          },
          "description": "Two or three goals for the next 90 days to suggest, each a number to reach."
        },
        "kind": {
          "default": "portfolio",
          "description": "The closest kind of business, one of: massage, yoga, photographer, hair, barbershop, nails, trainer, music-teacher, baker, restaurant, counselor, cleaner, musician, pet-care, portfolio.",
          "type": "string",
          "maxLength": 40
        },
        "tone": {
          "default": "warm",
          "description": "How the business should sound: warm, direct or neutral.",
          "type": "string",
          "enum": [
            "warm",
            "direct",
            "neutral"
          ]
        }
      },
      "required": [
        "summary",
        "customers",
        "market",
        "offer",
        "positioning",
        "channels",
        "checks",
        "risks",
        "nextSteps",
        "goals",
        "kind",
        "tone"
      ],
      "description": "Research you wrote yourself: Allpage saves it into the plan and doesn’t research it again. Left out, Allpage researches it, which spends AI credits after the free runs."
    }
  },
  "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"
        }
      }
    }
  ]
}

planning.restore

Go back to an earlier business plan

Kind
Change
Tool
planning_restore
Scope
planning: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": {
    "versionId": {
      "type": "string",
      "pattern": "^plv_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A version from planning_history. A plan version id: plv_ and 26 letters and digits."
    }
  },
  "required": [
    "versionId"
  ],
  "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"
        }
      }
    }
  ]
}

planning.signups

Your waitlist

Kind
Read
Tool
planning_signups
Scope
planning: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": {
            "signups": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "signedUpAt": {
                    "type": "string"
                  },
                  "carried": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "name",
                  "email",
                  "signedUpAt",
                  "carried"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "signups"
          ],
          "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": {}
    }
  ]
}

planning.skipProposals

Keep what you wrote in your business plan

Kind
Change
Tool
planning_skipProposals
Scope
planning: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": {
    "sections": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "summary",
          "customers",
          "market",
          "offer",
          "positioning",
          "channels",
          "goals",
          "checks",
          "risks",
          "nextSteps"
        ]
      },
      "description": "The sections whose proposals from research to skip."
    }
  },
  "required": [
    "sections"
  ],
  "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"
        }
      }
    }
  ]
}

planning.summary

What’s going on

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

planning.update

Change your business plan

Kind
Change
Tool
planning_update
Scope
planning: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": {
    "data": {
      "type": "object",
      "properties": {
        "summary": {
          "type": "string",
          "maxLength": 900,
          "description": "The business in two or three sentences: what it sells, to whom, where."
        },
        "customers": {
          "maxItems": 8,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 60,
                "description": "A short name for this kind of customer: \"New parents\"."
              },
              "who": {
                "type": "string",
                "maxLength": 300,
                "description": "Who they are, in a sentence."
              },
              "needs": {
                "type": "string",
                "maxLength": 300,
                "description": "What they need from the business."
              },
              "findsYou": {
                "type": "string",
                "maxLength": 300,
                "description": "Where they look for a business like this."
              },
              "pays": {
                "type": "string",
                "maxLength": 200,
                "description": "What they typically pay, as a rough range to check."
              },
              "objections": {
                "type": "string",
                "maxLength": 300,
                "description": "What stops them from buying."
              }
            },
            "required": [
              "name",
              "who",
              "needs",
              "findsYou",
              "pays",
              "objections"
            ]
          },
          "description": "2 to 4 kinds of customer, the likeliest first."
        },
        "market": {
          "type": "object",
          "properties": {
            "demand": {
              "type": "string",
              "maxLength": 800,
              "description": "How to tell people want it, and the cheapest way to test that."
            },
            "competition": {
              "type": "string",
              "maxLength": 800,
              "description": "What it competes with, in general terms, never named businesses."
            }
          },
          "required": [
            "demand",
            "competition"
          ],
          "description": "Demand and competition."
        },
        "offer": {
          "type": "object",
          "properties": {
            "what": {
              "type": "string",
              "maxLength": 800,
              "description": "What customers buy."
            },
            "pricing": {
              "type": "string",
              "maxLength": 700,
              "description": "What to charge and why, as a rough range to check."
            },
            "compare": {
              "type": "string",
              "maxLength": 700,
              "description": "How it compares with the alternatives."
            }
          },
          "required": [
            "what",
            "pricing",
            "compare"
          ],
          "description": "What customers buy, what to charge and how it compares."
        },
        "positioning": {
          "type": "string",
          "maxLength": 400,
          "description": "Why customers pick this business, in one or two lines."
        },
        "channels": {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 200
          },
          "description": "Where the first customers come from. Up to 6, each one short line."
        },
        "goals": {
          "maxItems": 8,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "what": {
                "type": "string",
                "maxLength": 120,
                "description": "What to count: \"Bookings a week\", \"Monthly revenue in $\"."
              },
              "target": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000,
                "description": "The number to reach."
              },
              "by": {
                "description": "The day to reach it by, as YYYY-MM-DD.",
                "type": "string",
                "format": "date",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
              }
            },
            "required": [
              "what",
              "target"
            ]
          },
          "description": "Goals for the next 90 days, each a number to reach."
        },
        "checks": {
          "maxItems": 10,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 240
          },
          "description": "Licenses, permits, registrations, insurance and taxes businesses like this typically look into, each as something to confirm with the agency that issues it. Up to 6, each one short line."
        },
        "risks": {
          "maxItems": 9,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 240
          },
          "description": "What could go wrong. Up to 5, each one short line."
        },
        "nextSteps": {
          "maxItems": 7,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 240
          },
          "description": "The next three things to do, in order: the first real customers soonest, spending as little as possible. Up to 3, each one short line."
        }
      },
      "additionalProperties": false,
      "description": "Only the sections that change, each whole: lists are replaced."
    },
    "version": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991,
      "description": "The version you read from planning_read."
    },
    "source": {
      "description": "Where it came from: \"website\" for what their website said. The owner’s own edit when left out.",
      "type": "string",
      "enum": [
        "owner",
        "website"
      ]
    }
  },
  "required": [
    "data",
    "version"
  ],
  "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"
        }
      }
    }
  ]
}

planning.waitlist

Make a waitlist page

Kind
Change
Tool
planning_waitlist
Scope
planning: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": {
    "headline": {
      "type": "string",
      "maxLength": 120
    },
    "blurb": {
      "type": "string",
      "maxLength": 400
    },
    "open": {
      "description": "Whether it takes signups; true when left out.",
      "type": "boolean"
    }
  },
  "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"
        }
      }
    }
  ]
}