Save a page or a post
Creates or changes a page of the draft from sections, or a blog post in Markdown.
$0.01 a call
From your agent’s balance. A call that fails costs nothing.
An example
Make the home page: a big photo of the Willamette 8, "Bikes that keep rolling", our three promises, and a button to book a fitting.
Your agent callswebsite_save_page$0.01 a call
The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.
{
"site": "halverson-cycle",
"path": "",
"title": "Halverson Cycle & Repair",
"sections": [
{
"type": "hero",
"heading": "Bikes that keep rolling",
"text": "City, gravel and cargo bikes, and a repair workshop that knows them, on SE Ash St in Portland.",
"image": "3b9f0d2c-7e14-4a8b-9c61-5d2e8f0a1b47",
"image_alt": "The Willamette 8 in green",
"buttons": [
{
"label": "See the bikes",
"link": "/bikes"
},
{
"label": "Book a fitting",
"link": "/#fitting"
}
],
"layout": "split"
},
{
"type": "features",
"heading": "Why Halverson",
"items": [
{
"title": "Built here",
"text": "Every bike is built and tuned in our workshop before it leaves."
},
{
"title": "Repairs in days",
"text": "Most tune-ups are ready in 2 to 3 working days."
},
{
"title": "A free first tune-up",
"text": "Every bike we sell comes back for one within 6 months."
}
]
},
{
"type": "booking",
"id": "fitting",
"heading": "Come in for a fitting",
"text": "1830 SE Ash St, Portland. Book a 45-minute bike fitting.",
"meeting": "bike-fitting",
"button_label": "Book a fitting"
}
]
}Use it when
A page or a blog post is new or changes; the change stays in the draft until it is published.
- For the footer, header button, blog title or language, use
website_settings.
What it does
Create or change a page of the draft, matched by path ("" is the home page, "about", "services/cleaning"); only what is passed changes, and sections replace all of the page's sections. A page is made of sections; a blog post (kind "post", path = its slug) has a Markdown body and a date, and lives at /blog/<slug>. nav puts the page in the menu with that label. Images are image file_ids from the file store; in Markdown write . Sections, each {"type": ...}: hero {heading, text, image, image_alt, buttons [{label, link}] (up to 2), layout "center" | "split"}; text {heading, body (Markdown)}; features {heading, text, items [{title, text}]}; image {image, alt, caption, size "normal" | "wide"}; gallery {heading, images [{image, alt, caption}]}; pricing {heading, text, plans [{name, price, period, description, features [..], button, highlight, label (above a highlighted plan; default "Most popular" in the site's language)}]}; testimonials {heading, items [{quote, name, role}]}; faq {heading, items [{question, answer (Markdown)}]}; cta {heading, text, button}; stats {heading, items [{value, label}]}; logos {heading, images [{image, alt}]}; contact {heading, text, email, phone, address, form (a form's slug), button_label}; booking {heading, text, meeting (a meeting type's slug), button_label}; newsletter {heading, text, newsletter (its slug), button_label}; posts {heading, count} lists the latest blog posts. Images are image file_ids from the file store, with alt text. A link is a page of the site ("/about"), https://..., mailto: or tel:. Optional on any section: id (for "#links") and background "plain" | "tinted" | "brand".
What comes back
The page (path, kind, title, description, nav, sections or body) with its address, and created: true when it is new. Every reply also carries cost_usd and balance_usd.
Inputs
| Name | Type | What it is |
|---|---|---|
siteRequired | string | The site's name, as in cncto.co/w/<name>. 3 to 60 characters. |
pathRequired | string | Up to 120 characters. |
kind | string | One of: page,post. Default: page. |
title | string | Up to 120 characters. |
description | string | For search engines and link previews. Up to 300 characters. |
nav | string | The page's label in the menu; "" takes it out. Up to 40 characters. |
nav_order | integer | -999 to 999. |
sections | array of objects | Sections, each {"type": ...}: hero {heading, text, image, image_alt, buttons [{label, link}] (up to 2), layout "center" | "split"}; text {heading, body (Markdown)}; features {heading, text, items [{title, text}]}; image {image, alt, caption, size "normal" | "wide"}; gallery {heading, images [{image, alt, caption}]}; pricing {heading, text, plans [{name, price, period, description, features [..], button, highlight, label (above a highlighted plan; default "Most popular" in the site's language)}]}; testimonials {heading, items [{quote, name, role}]}; faq {heading, items [{question, answer (Markdown)}]}; cta {heading, text, button}; stats {heading, items [{value, label}]}; logos {heading, images [{image, alt}]}; contact {heading, text, email, phone, address, form (a form's slug), button_label}; booking {heading, text, meeting (a meeting type's slug), button_label}; newsletter {heading, text, newsletter (its slug), button_label}; posts {heading, count} lists the latest blog posts. Images are image file_ids from the file store, with alt text. A link is a page of the site ("/about"), https://..., mailto: or tel:. Optional on any section: id (for "#links") and background "plain" | "tinted" | "brand". Up to 40 items. |
sections[].typeRequired | string | One of: hero,text,features,image,gallery,pricing,testimonials,faq,cta,stats,logos,contact,booking,newsletter,posts. |
body | string | Posts: Markdown. Up to 100,000 characters. |
date | string | Posts. Default today. Matches ^\d{4}-\d{2}-\d{2}$. |
image | string | A file_id: the image shown when the page is shared, and a post's cover. Up to 36 characters. |
The call
Over MCP, call website_save_page on https://api.conecto.chat/mcp/websites. Over REST:
curl -X POST https://api.conecto.chat/v1/tools/website_save_page \
-H "Authorization: Bearer $CONECTO_KEY" \
-H "Content-Type: application/json" \
-d '{"site":"halverson-cycle","path":"","title":"Halverson Cycle & Repair","sections":[{"type":"hero","heading":"Bikes that keep rolling","text":"City, gravel and cargo bikes, and a repair workshop that knows them, on SE Ash St in Portland.","image":"3b9f0d2c-7e14-4a8b-9c61-5d2e8f0a1b47","image_alt":"The Willamette 8 in green","buttons":[{"label":"See the bikes","link":"/bikes"},{"label":"Book a fitting","link":"/#fitting"}],"layout":"split"},{"type":"features","heading":"Why Halverson","items":[{"title":"Built here","text":"Every bike is built and tuned in our workshop before it leaves."},{"title":"Repairs in days","text":"Most tune-ups are ready in 2 to 3 working days."},{"title":"A free first tune-up","text":"Every bike we sell comes back for one within 6 months."}]},{"type":"booking","id":"fitting","heading":"Come in for a fitting","text":"1830 SE Ash St, Portland. Book a 45-minute bike fitting.","meeting":"bike-fitting","button_label":"Book a fitting"}]}'When it refuses
A refused call costs nothing and says what to do next.
| Code | When | What to do |
|---|---|---|
not_found404 | No website of the business has that name. | Call website_list and use one of its names. |
not_found404 | An image is not a file in the file store. | Upload it with files_upload and use its file_id. |
invalid_input400 | The path, a section or a field is not valid: sections on a post, a body on a page, a new page without a title, an image that is not a picture. | Fix what the message names; the tool description lists every section and its fields. |
conflict409 | The path is a page and would become a post, or the other way round. | Use another path, or delete the old one first. |
limit_reached409 | The site has as many pages and posts as it may. | Delete pages it no longer needs with website_delete_page. |
More Websites tools
All 11 tools- Create a website
website_createStarts a website for the business at cncto.co/w/<name> as a draft with a home page, in its brand.$0.01 a call - Change a website's settings
website_settingsChanges the site's title, description, language, footer, header button, blog, and whether its pages carry the analytics script and the chat.$0.001 a call - Preview a website
website_previewA private link to the draft as it would look published, working for 24 hours.Free* - Publish a website
website_publishPuts the draft online; the first publish starts the monthly rent, later ones cost the price of an edit.$5.00 the first time, then $0.01 - Read a website
website_getA site with every page of its draft, its settings, its kept versions, and whether the draft has unpublished changes.Free* - List websites
website_listThe business's websites, published or not.Free* - Delete a page
website_delete_pageRemoves a page or post from the draft; the home page stays.$0.001 a call - Go back to an earlier version
website_rollbackPublishes one of the kept versions again; the draft stays as it is.$0.01 a call
Give this to your agent.
Set up Conecto from https://conecto.chat/SKILL.md