PendiumDocs

Build and publish site pages

List, read, create, generate, edit, publish, and remove pages on the brand's agent site.

The brand's agent site is a public, AI-readable site served at /{username}. These tools cover the full lifecycle of its pages: authoring or AI-generating content, editing metadata, and taking pages live or offline.

When to use

Use these tools to manage the durable Pages on the agent site — the Profile, FAQ, custom pages, and local service-area landing pages. For the brand's whole-page front door, generate_homepage composes an AI-designed homepage at /home/{username}. A published page is only publicly reachable if the agent site itself is public; turn the whole site on with set_agent_site_public first (or check its state with get_feed_settings). AI generation (generate_agent_page, generate_homepage, generate_service_area_pages) requires a Starter or Pro plan with available credits.

Typical sequence

  1. list_agent_pages — see what pages already exist and their generation status.
  2. Author the page: create_agent_page (you provide the content, no LLM) or generate_agent_page (AI writes it in the background). For local businesses, generate_service_area_pages creates one page per neighborhood × service.
  3. For AI-generated pages, poll list_agent_pages until the page reports generating: false.
  4. get_agent_page to read the full body; update_agent_page to adjust title, slug, or meta description.
  5. publish_agent_page to go live (ensure the site itself is public via set_agent_site_public).
  6. unpublish_agent_page to revert to draft, or delete_agent_page to remove permanently.

Tools

list_agent_pages

List all pages on the brand's agent site, with each page's generation status. Use this to poll after generate_agent_page or generate_service_area_pages: a page with generating: true is still having its AI content filled in; generating: false means the content has landed. A page that's still generating cannot be published — publish_agent_page rejects it until generating: false.

Authentication: Required.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID whose pages to list.

Returns count and a pages array. Each page includes agentPageId, title, slug, status (draft / published / archived), pageType, category, and generating.

get_agent_page

Fetch one page on the brand's agent site, including its body (markdown extracted from the page's sections). Use after list_agent_pages to read the full content before proposing an edit with update_agent_page.

Authentication: Required. The agent must belong to the authenticated account (owner, admin, or a group-shared member).

ParameterTypeRequiredDescription
agentPageIdstringYesThe page to fetch (from list_agent_pages).

Returns success, the syntheticId, and a page object with agentPageId, type, title, slug, status, metaDescription, body, publishedAt, updatedAt, and generating. A page belonging to a different agent returns a generic not-found error.

create_agent_page

Create a new page by providing the content yourself. No LLM call, no credits. Pass body as markdown — it's wrapped in a hero (headline = title) plus a single section. To have AI write the content instead, use generate_agent_page.

Page types:

  • custom (default): a branded page whose slug is derived from the title (auto-suffixed -2, -3 on collision).
  • profile / faq: the brand's typed profile or FAQ page. Only one of each per agent — if it already exists this returns an error pointing you to update_agent_page. The reserved slug (profile / faq) is used automatically.

Authentication: Required. The agent must belong to the authenticated account (owner, admin, or a group-shared member). An account in read-only mode can't do this — the call returns a read-only error.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to add the page to.
type"custom" | "profile" | "faq"NoPage type. Defaults to custom.
titlestring (1–300)YesPage title. Also drives the URL slug for custom pages.
bodystring (1–100000)YesPage body as markdown. Wrapped in a hero + single section by the renderer.
status"draft" | "published"NoPublication status. Defaults to draft.
metaDescriptionstring (≤500)NoShort SEO meta description.

Returns success, the syntheticId, the new agentPageId, plus the type, title, slug, and status. A published page is only publicly reachable if the agent site itself is public — see set_agent_site_public.

generate_agent_page

Create a new page and generate its content with AI. The page is created immediately as a draft shell, then a background job fills in the hero and sections. This tool returns right away — poll list_agent_pages until the page reports generating: false. For local service-area landing pages, use generate_service_area_pages instead.

Authentication: Paid. The agent's owning account must have available credits (a Starter or Pro plan) — the background content generation uses LLM credits, billed to the owner.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to add the page to.
titlestring (1–200)YesHuman-readable page title. Shows as the hero headline and in nav.
slugstring (1–200)YesURL slug — the page resolves to /{username}/{slug}. Lowercase letters, numbers, and hyphens only. Must be unique per agent and cannot be a reserved slug (profile, faq, services, resources, service-areas).
categoryenumNoNav placement. product (default) = an offering, shown in the Products/Services nav. resource = a topic/pillar page, shown in the Resources nav.

Returns agentPageId, plus the syntheticId, slug, title, and category. The page starts as a draft with placeholder content; poll list_agent_pages and wait for generating: false, then publish it with publish_agent_page.

generate_homepage

Generate the brand's AI-designed homepage — a bespoke, whole-page design (palette, typography, and section layout) composed by an LLM design director from the brand's real content and photos, served at /home/{username}. Distinct from generate_agent_page (which creates one tier-2 crawler page): the homepage is the brand's front door. Returns right away; the design generates in the background (~1–2 minutes) and is saved as a new version each run, so regenerating is safe. The owner previews it in-app; it goes public at /home/{username} only once the homepage is published.

Authentication: Paid. Generating the homepage uses LLM credits, billed to the agent's owning account and gated on its plan/balance.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to generate the homepage for.
moodPromptstring (≤300)NoOptional design direction, e.g. "big type, lots of whitespace, editorial". Omit to let the design director choose from the brand's content.

Returns the designId and version for the design that is now generating, plus the syntheticId. Poll the brand's homepage status (or wait for the completion notification) before treating the design as ready.

generate_homepage_variants

Explore several homepage looks at once: runs the AI design director multiple times in divergent curated style directions (Editorial, Bold & Confident, Warm & Human, Dark Technical) and produces real candidate designs the owner picks from. The live homepage does not change until a candidate is chosen with choose_homepage_variant. Returns right away; the variants generate in the background (~3–5 minutes).

Authentication: Paid. Each variant is a metered LLM generation billed to the agent's owning account, gated on its plan/balance (no free-first grant — unlike the single generate_homepage).

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to generate style variants for.
directionKeysstring[] (1–4)NoStyle directions to explore: editorial, bold, warm, technical, minimal, heritage. Omit for a curated trio.
moodPromptstring (≤300)NoOptional extra design direction applied to every variant.

Returns the batch designId and the directions being generated. Poll list_homepage_variants until the candidates appear.

list_homepage_variants

List the homepage style-variant candidates currently awaiting the owner's pick. Each carries a direction name, one-line vibe, and the design thesis the AI wrote for that variant. Visual previews live on the in-app Homepage page.

Authentication: Required. The agent must belong to the authenticated account.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to list variant candidates for.

Returns candidates — each with designId, direction, name, vibe, and designThesis. An empty list means nothing is awaiting a pick.

choose_homepage_variant

Apply one style-variant candidate as the brand's live homepage design; the other candidates are retired. Changes what renders at /home/{username} once the homepage is published.

Authentication: Required. The agent must belong to the authenticated account. An account in read-only mode can't do this.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID the candidate belongs to.
designIdstringYesThe candidate's designId from list_homepage_variants.

Returns success: true when the pick applied. success: false means the candidate was no longer available (already picked, or replaced by a newer batch) — call list_homepage_variants for the current set.

get_homepage_status

Read the agent's generative homepage state in one call: whether an AI-designed homepage exists (active version, style, and the design thesis the AI wrote), whether a generation is currently running (with the design-mockup preview URL once it lands) or failed, whether the homepage is published (live at /home/{username}), and which app experience the brand runs (chat brands' homepage is their primary site; full brands are Agent-Site-first). Call it before making claims or recommendations about the brand's Pendium-hosted site.

Authentication: Required. The agent must belong to the authenticated account.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to read homepage status for.

Returns experience, hasHomepage, published, liveUrl, activeDesign (version, style, designThesis), and currentRun. currentRun reflects the newest design's state: generating (with mockupPreviewUrl) while a design is being built, awaiting_approval (with designId + mockupPreviewUrl) when a design preview is parked for the user to approve or change in the app chat, or failed (with the error). It is null when nothing is in flight.

list_homepage_templates

List the homepage template gallery — curated design languages (Editorial, Bold & Confident, Warm & Human, Dark Technical, Swiss Minimal, Heritage & Craft), each with a full example-site mockup image. The mockups are real renders of each style applied to a demo brand, so they show exactly what the design system produces. Templates differ from variants: variants are one-off explorations of your brand; templates are a persistent gallery you can re-apply any time.

Authentication: Required. The agent must belong to the authenticated account.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID (templates are global; the call is access-scoped).

Returns templates — each with key, name, vibe, and mockupUrl (a full-page mockup image suitable for showing in a card).

apply_homepage_template

Redesign the agent's homepage in one of the gallery templates: the design director regenerates the page in that design language while the brand's own content, logo, and photos stay in place. Runs in the background (~1–2 minutes) and lands as a new design version — the previous design is kept, so applying a template is safe to try.

Authentication: Paid. A metered LLM generation billed to the agent's owning account, gated on its plan/balance. An account in read-only mode can't do this.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to redesign the homepage for.
templateKeystringYesThe template's key from list_homepage_templates.
moodPromptstring (≤300)NoOptional extra direction layered on top of the template.

Returns the new designId, version, and generating: true. The redesigned homepage appears on the in-app Homepage page when ready; it's live at /home/{username} only while the homepage is published.

update_agent_page

Edit the metadata of an existing page — its title, URL slug, and/or SEO meta description. Pass agentPageId plus whichever fields you want to change (at least one). Synchronous, no LLM call. To (re)generate the page's hero and section content, use generate_agent_page instead.

Authentication: Required. The agent must belong to the authenticated account (owner, admin, or a group-shared member). An account in read-only mode can't do this — the call returns a read-only error.

ParameterTypeRequiredDescription
agentPageIdstringYesThe page to edit (from list_agent_pages).
titlestring (1–200)NoNew page title / hero headline. Omit to keep current.
slugstring (1–200)NoNew URL slug — resolves to /{username}/{slug}. Lowercase letters, numbers, and hyphens only. Must be unique per agent and cannot be a reserved slug (profile, faq, services). Omit to keep current.
metaDescriptionstring (≤320)NoNew SEO meta description. Omit to keep current.

At least one of title, slug, or metaDescription must be provided. Returns success, the syntheticId, and the agentPageId. A page belonging to a different agent returns a generic not-found error.

publish_agent_page

Publish a page so it goes live at /{username}/{slug}, and ping IndexNow (Bing/Yandex) to re-crawl the newly-visible URL. Synchronous, no LLM call. The page must have finished generating its content first — publishing a page that's still generating is rejected (it would otherwise go live as an empty placeholder shell). Poll list_agent_pages until it reports generating: false, then publish.

A published page is only publicly reachable if the agent site itself is public — use set_agent_site_public to turn the whole site on.

Authentication: Required. The agent must belong to the authenticated account (owner, admin, or a group-shared member). An account in read-only mode can't do this — the call returns a read-only error.

ParameterTypeRequiredDescription
agentPageIdstringYesThe page to publish (from list_agent_pages).

Returns success, the syntheticId, and the agentPageId. A page belonging to a different agent returns a generic not-found error.

unpublish_agent_page

Take a page offline. The page stops resolving at its public URL and reverts to a draft, but is not deleted — re-publish it any time with publish_agent_page. Synchronous, no LLM call. To remove a page permanently instead, use delete_agent_page.

Authentication: Required. The agent must belong to the authenticated account (owner, admin, or a group-shared member). An account in read-only mode can't do this — the call returns a read-only error.

ParameterTypeRequiredDescription
agentPageIdstringYesThe page to unpublish (from list_agent_pages).

Returns success, the syntheticId, and the agentPageId. A page belonging to a different agent returns a generic not-found error.

delete_agent_page

Permanently remove a page from the brand's agent site. Destructive and irreversible. Anyone with access to the agent — including shared team members — can delete a page (alongside creating, editing, and publishing pages). Synchronous, no LLM call. To take a page offline without deleting it, use unpublish_agent_page instead.

Authentication: Required. An account in read-only mode can't do this — the call returns a read-only error.

ParameterTypeRequiredDescription
agentPageIdstringYesThe page to delete (from list_agent_pages).

Returns success, the syntheticId, and the deletedAgentPageId. A page belonging to a different agent returns the same generic not-found error (no distinction, so the page's existence isn't leaked).

generate_service_area_pages

Generate local landing pages for a service business — one page per neighborhood × service combination, each with a lead-capture form. The brand must have resolved service areas first (connect a Yelp or Google Business listing that has neighborhoods); otherwise this returns an error. Pages are generated in the background as drafts. This tool returns immediately with how many pages were planned — poll list_agent_pages and watch for new pages with category: "service_area".

Authentication: Paid. The agent's owning account must have available credits (a Starter or Pro plan) — generating the pages uses LLM credits, billed to the owner.

ParameterTypeRequiredDescription
syntheticIdintegerYesThe agent ID to generate service-area pages for.

Returns plannedCount — the upper bound on how many pages will be created (combinations that already have a page are skipped) — plus the syntheticId. Poll list_agent_pages and count pages with category: "service_area" until it stops rising.