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"
}
}
}
]
}