Browse the docs

Marketing

Marketing 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.

What you can do

  • Plan a campaign: the assistant asks you first
  • Change a campaign’s words: the assistant can do it on its own
  • Write a campaign’s captions again: the assistant can do it on its own
  • Launch a campaign: the assistant can prepare it and you confirm it, twice
  • Mark a campaign post as posted: the assistant can do it on its own
  • End a campaign: the assistant asks you first
  • Plan the campaign we suggest: only you can do it, on its screen

For apps

Tools

  • marketing_createCampaign (Plan a campaign): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • marketing_updateCaptions (Change a campaign’s words): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • marketing_writeCaptions (Write a campaign’s captions again): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • marketing_launch (Launch a campaign): waits for the owner to confirm it in Allpage, whatever they chose for your app
  • marketing_markPosted (Mark a campaign post as posted): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • marketing_endCampaign (End a campaign): customers see it: waits for the owner’s approval unless they chose Just do it for your app

Reads

  • marketing_campaigns (List your campaigns and what each brought)
  • marketing_campaign (See one campaign: its words, links and results)
  • marketing_calendar (See what your campaigns send and post, day by day)
  • marketing_idea (See the campaign we’d plan for you)
  • marketing_summary (What’s going on)

Only the owner, in Allpage

  • Plan the campaign we suggest

Operations

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

marketing.calendar

See what your campaigns send and post, day by day

Kind
Read
Tool
marketing_calendar
Scope
marketing:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "from": {
      "description": "The first day, in the business’s time. Left out: today.",
      "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])))$"
    },
    "days": {
      "default": 14,
      "type": "integer",
      "minimum": 1,
      "maximum": 92
    }
  },
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "timeZone": {
              "type": "string"
            },
            "from": {
              "type": "string"
            },
            "days": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "date": {
                    "type": "string"
                  },
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "date": {
                          "type": "string"
                        },
                        "at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                        },
                        "campaignId": {
                          "type": "string",
                          "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
                          "description": "A campaign id: cmp_ and 26 letters and digits."
                        },
                        "name": {
                          "type": "string"
                        },
                        "channel": {
                          "type": "string",
                          "enum": [
                            "google",
                            "facebook",
                            "instagram",
                            "email",
                            "sms"
                          ]
                        },
                        "label": {
                          "type": "string"
                        },
                        "planned": {
                          "type": "boolean"
                        },
                        "status": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "date",
                        "at",
                        "campaignId",
                        "name",
                        "channel",
                        "label",
                        "planned",
                        "status"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "date",
                  "items"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "timeZone",
            "from",
            "days"
          ],
          "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": {}
    }
  ]
}

marketing.campaign

See one campaign: its words, links and results

Kind
Read
Tool
marketing_campaign
Scope
marketing:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "campaignId": {
      "type": "string",
      "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A campaign id: cmp_ and 26 letters and digits."
    }
  },
  "required": [
    "campaignId"
  ],
  "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": {
            "campaignId": {
              "type": "string",
              "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
              "description": "A campaign id: cmp_ and 26 letters and digits."
            },
            "name": {
              "type": "string"
            },
            "slug": {
              "type": "string"
            },
            "phase": {
              "type": "string",
              "enum": [
                "draft",
                "scheduled",
                "running",
                "ended"
              ]
            },
            "status": {
              "type": "string",
              "enum": [
                "draft",
                "launched",
                "ended"
              ]
            },
            "message": {
              "type": "string"
            },
            "subject": {
              "type": "string"
            },
            "audience": {
              "type": [
                "string",
                "null"
              ]
            },
            "offer": {
              "type": [
                "string",
                "null"
              ]
            },
            "code": {
              "type": [
                "string",
                "null"
              ]
            },
            "startsAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
            },
            "endsAt": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "writingCaptions": {
              "type": "boolean"
            },
            "channels": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "channel": {
                    "type": "string",
                    "enum": [
                      "google",
                      "facebook",
                      "instagram",
                      "email",
                      "sms"
                    ]
                  },
                  "label": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "planned",
                      "scheduled",
                      "draft",
                      "posted",
                      "skipped",
                      "cancelled",
                      "sent"
                    ],
                    "description": "planned (before launch), scheduled, posted, sent (with reach), draft (for the owner to post), skipped (note says why) or cancelled."
                  },
                  "caption": {
                    "type": "string"
                  },
                  "edited": {
                    "type": "boolean"
                  },
                  "link": {
                    "type": "string"
                  },
                  "note": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "sendAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "reach": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "channel",
                  "label",
                  "status",
                  "caption",
                  "edited",
                  "link",
                  "note",
                  "sendAt",
                  "reach"
                ],
                "additionalProperties": false
              }
            },
            "results": {
              "type": "object",
              "properties": {
                "orders": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "paidMinor": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                "paid": {
                  "type": "string"
                }
              },
              "required": [
                "orders",
                "paidMinor",
                "paid"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "campaignId",
            "name",
            "slug",
            "phase",
            "status",
            "message",
            "subject",
            "audience",
            "offer",
            "code",
            "startsAt",
            "endsAt",
            "writingCaptions",
            "channels",
            "results"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

marketing.campaigns

List your campaigns and what each brought

Kind
Read
Tool
marketing_campaigns
Scope
marketing: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": {
            "campaigns": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "campaignId": {
                    "type": "string",
                    "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A campaign id: cmp_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "slug": {
                    "type": "string"
                  },
                  "phase": {
                    "type": "string",
                    "enum": [
                      "draft",
                      "scheduled",
                      "running",
                      "ended"
                    ]
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "draft",
                      "launched",
                      "ended"
                    ]
                  },
                  "message": {
                    "type": "string"
                  },
                  "subject": {
                    "type": "string"
                  },
                  "audience": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "offer": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "code": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "startsAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                  },
                  "endsAt": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "writingCaptions": {
                    "type": "boolean"
                  },
                  "channels": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "channel": {
                          "type": "string",
                          "enum": [
                            "google",
                            "facebook",
                            "instagram",
                            "email",
                            "sms"
                          ]
                        },
                        "label": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "planned",
                            "scheduled",
                            "draft",
                            "posted",
                            "skipped",
                            "cancelled",
                            "sent"
                          ],
                          "description": "planned (before launch), scheduled, posted, sent (with reach), draft (for the owner to post), skipped (note says why) or cancelled."
                        },
                        "caption": {
                          "type": "string"
                        },
                        "edited": {
                          "type": "boolean"
                        },
                        "link": {
                          "type": "string"
                        },
                        "note": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "sendAt": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "reach": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "channel",
                        "label",
                        "status",
                        "caption",
                        "edited",
                        "link",
                        "note",
                        "sendAt",
                        "reach"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "results": {
                    "type": "object",
                    "properties": {
                      "orders": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "paidMinor": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "paid": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "orders",
                      "paidMinor",
                      "paid"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "campaignId",
                  "name",
                  "slug",
                  "phase",
                  "status",
                  "message",
                  "subject",
                  "audience",
                  "offer",
                  "code",
                  "startsAt",
                  "endsAt",
                  "writingCaptions",
                  "channels",
                  "results"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "campaigns"
          ],
          "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": {}
    }
  ]
}

marketing.createCampaign

Plan a campaign

Kind
Change
Tool
marketing_createCampaign
Scope
marketing: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
    },
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "description": "What it says, in the owner’s words. Each channel’s caption starts from it."
    },
    "subject": {
      "default": "",
      "description": "The newsletter’s subject. Left out, Allpage writes one with the captions, or uses the campaign’s name when you wrote them.",
      "type": "string",
      "maxLength": 150
    },
    "audienceId": {
      "description": "An audience you already have (sales_audiences).",
      "type": "string",
      "pattern": "^aud_[0-9a-hjkmnp-tv-z]{26}$"
    },
    "newAudience": {
      "description": "The name of a new audience for this campaign, like Gold. Customers join it through the code or the campaign’s links.",
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "offer": {
      "type": "object",
      "properties": {
        "percentOff": {
          "description": "Percent off, like 15.",
          "type": "number",
          "minimum": 1,
          "maximum": 100
        },
        "amountOffMinor": {
          "description": "Or an amount off, in cents.",
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "code": {
          "description": "What customers type, like GOLD15. Left out with a new audience, customers get in by the campaign’s links instead.",
          "type": "string",
          "maxLength": 40
        },
        "productIds": {
          "description": "The products it’s off; left out, the whole order.",
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^prd_[0-9a-hjkmnp-tv-z]{26}$",
            "description": "A product id: prd_ and 26 letters and digits."
          }
        }
      },
      "additionalProperties": false
    },
    "channels": {
      "minItems": 1,
      "maxItems": 5,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "google",
          "facebook",
          "instagram",
          "email",
          "sms"
        ]
      },
      "description": "google, facebook, instagram (posts), email and sms (the newsletter)."
    },
    "startsAt": {
      "description": "When it goes out, in the business’s time. Left out: at launch.",
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "minute": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 1439
            },
            {
              "type": "string",
              "pattern": "^\\d{1,2}:\\d{2}$"
            }
          ]
        }
      },
      "required": [
        "date",
        "minute"
      ],
      "additionalProperties": false
    },
    "endsAt": {
      "description": "When the offer stops, in the business’s time.",
      "type": "object",
      "properties": {
        "date": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "minute": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 1439
            },
            {
              "type": "string",
              "pattern": "^\\d{1,2}:\\d{2}$"
            }
          ]
        }
      },
      "required": [
        "date",
        "minute"
      ],
      "additionalProperties": false
    },
    "landingPath": {
      "default": "/",
      "description": "The page its links open on the website.",
      "type": "string",
      "maxLength": 200,
      "pattern": "^\\/[A-Za-z0-9/_-]*$"
    },
    "captions": {
      "description": "Each channel’s words, by channel id, written by you in the brand’s voice (brand_kit). Allpage uses them and writes none of its own; a channel left out starts from the message. Left out entirely, Allpage writes them, which spends AI credits.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "google",
          "facebook",
          "instagram",
          "email",
          "sms"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1,
        "maxLength": 5000
      }
    }
  },
  "required": [
    "name",
    "message",
    "channels"
  ],
  "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"
        }
      }
    }
  ]
}

marketing.endCampaign

End a campaign

Kind
Change
Tool
marketing_endCampaign
Scope
marketing: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": {
    "campaignId": {
      "type": "string",
      "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A campaign id: cmp_ and 26 letters and digits."
    }
  },
  "required": [
    "campaignId"
  ],
  "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"
        }
      }
    }
  ]
}

marketing.idea

See the campaign we’d plan for you

Kind
Read
Tool
marketing_idea
Scope
marketing: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": {
            "idea": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "channels": {
                  "minItems": 1,
                  "type": "array",
                  "items": {
                    "type": "string",
                    "enum": [
                      "google",
                      "facebook",
                      "instagram",
                      "email",
                      "sms"
                    ]
                  }
                },
                "reach": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "message",
                "channels",
                "reach"
              ],
              "additionalProperties": false
            },
            "pending": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "proposalId": {
                      "type": "string",
                      "pattern": "^prp_[0-9a-hjkmnp-tv-z]{26}$",
                      "description": "A proposal id: prp_ and 26 letters and digits."
                    }
                  },
                  "required": [
                    "proposalId"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "idea",
            "pending"
          ],
          "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": {}
    }
  ]
}

marketing.launch

Launch a campaign

Kind
Change
Tool
marketing_launch
Scope
marketing:write
Reached by
API, MCP, ChatGPT

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

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "campaignId": {
      "type": "string",
      "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A campaign id: cmp_ and 26 letters and digits."
    }
  },
  "required": [
    "campaignId"
  ],
  "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"
        }
      }
    }
  ]
}

marketing.markPosted

Mark a campaign post as posted

Kind
Change
Tool
marketing_markPosted
Scope
marketing: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": {
    "campaignId": {
      "type": "string",
      "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A campaign id: cmp_ and 26 letters and digits."
    },
    "channel": {
      "type": "string",
      "enum": [
        "google",
        "facebook",
        "instagram"
      ]
    }
  },
  "required": [
    "campaignId",
    "channel"
  ],
  "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"
        }
      }
    }
  ]
}

marketing.summary

What’s going on

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

marketing.updateCaptions

Change a campaign’s words

Kind
Change
Tool
marketing_updateCaptions
Scope
marketing: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": {
    "campaignId": {
      "type": "string",
      "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A campaign id: cmp_ and 26 letters and digits."
    },
    "subject": {
      "type": "string",
      "maxLength": 150
    },
    "captions": {
      "default": {},
      "description": "Each channel’s words, by channel id.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "google",
          "facebook",
          "instagram",
          "email",
          "sms"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1,
        "maxLength": 5000
      }
    }
  },
  "required": [
    "campaignId"
  ],
  "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"
        }
      }
    }
  ]
}

marketing.writeCaptions

Write a campaign’s captions again

Kind
Change
Tool
marketing_writeCaptions
Scope
marketing: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": {
    "campaignId": {
      "type": "string",
      "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A campaign id: cmp_ and 26 letters and digits."
    },
    "captions": {
      "description": "Fresh words for each channel, by channel id, written by you in the brand’s voice (brand_kit). They replace each caption the owner hasn’t changed themselves. Left out, Allpage writes them, which spends AI credits.",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "google",
          "facebook",
          "instagram",
          "email",
          "sms"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1,
        "maxLength": 5000
      }
    }
  },
  "required": [
    "campaignId"
  ],
  "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"
        }
      }
    }
  ]
}