Carryo Website Publisher
Publish and update HTML websites, landing pages, reports and proposals from AI chat. OAuth sign-in.
Should I use this
Quality & Safety
Findings (17)
- LOWin account.check_publishing
- LOWin website.publish
- LOWin website.save_draft
- LOWin website.read
- LOWin website.read_form_responses
- LOWin website.list_versions
- LOWin website.read_version
- LOWin website.edit_images
- LOWin website.edit
- LOWin team.list
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"website-publisher": {
"url": "https://mcp.carryo.io/mcp"
}
}
}Remote endpoints
https://mcp.carryo.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (12)
π’account.check_publishing
Checks publishing availability, remaining Personal website capacity, reset timing, hosted-image allowances, custom URL endings, branding capabilities, and inactivity policies for the connected Carryo account. Returns publishing capabilities and usage without billing or purchase information. Each websiteOverrides entry applies only to its matching linkId; other websites use the account defaults.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"websiteOverrides": {
"type": "array",
"items": {
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "The website this exception applies to; never apply it to other websites"
},
"imagesPerSite": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Maximum hosted images on this website; null means no plan-specific count limit"
},
"updatesPerLink": {
"type": [
"number",
"null"
],
"description": "Update limit for this website; null means unlimited subject to fair use"
},
"inactivityWindowDays": {
"type": [
"number",
"null"
],
"description": "Owner-inactivity window for this website; null means no inactivity expiry"
},
"canHideCarryoBadge": {
"type": "boolean",
"description": "Whether this website can hide its badge in Carryo settings; removal is not automatic"
},
"canUseCustomDomain": {
"type": "boolean",
"description": "Whether this website can use a custom domain configured in Carryo"
}
},
"required": [
"linkId",
"updatesPerLink",
"inactivityWindowDays",
"canHideCarryoBadge",
"canUseCustomDomain"
],
"additionalProperties": false
},
"description": "Website-specific exceptions to Personal defaults. Explicit owner-set expiry and unpublishing still apply"
},
"capabilities": {
"type": "object",
"properties": {
"canCollectFormResponses": {
"type": "boolean",
"description": "Whether Personal forms can currently collect responses; Team access is resolved from the website"
},
"canPublishLink": {
"type": "boolean",
"description": "Whether another Personal link can be published now"
},
"canUseCustomUrlEnding": {
"type": "boolean",
"description": "Whether a custom Carryo URL ending can be used"
},
"canCustomizePasswordPage": {
"type": "boolean",
"description": "Whether password pages can use custom branding in Carryo"
},
"canHideCarryoBadge": {
"type": "boolean",
"description": "Whether the Carryo badge can be hidden in Carryo settings"
},
"linksStayOnlineWithoutActivity": {
"type": "boolean",
"description": "Whether links stay online without periodic owner activity"
}
},
"required": [
"canPublishLink",
"canUseCustomUrlEnding",
"canCustomizePasswordPage",
"canHideCarryoBadge",
"linksStayOnlineWithoutActivity"
],
"additionalProperties": false,
"description": "Personal default capabilities. Use websiteOverrides for the named websites, not for the whole account"
},
"usage": {
"type": "object",
"properties": {
"activeLinks": {
"type": "number",
"description": "Current number of active Personal links"
},
"activeLinkLimit": {
"type": [
"number",
"null"
],
"description": "Maximum active Personal links, or null when no product limit applies"
},
"remainingActiveLinks": {
"type": [
"number",
"null"
],
"description": "How many more Personal links can be published now, or null when no product limit applies"
},
"newLinksThisPeriod": {
"type": "number",
"description": "New Personal links created or claimed in the current creation period"
},
"newLinkLimit": {
"type": [
"number",
"null"
],
"description": "Maximum new Personal links in the current period, or null when no creation limit applies"
},
"remainingNewLinks": {
"type": [
"number",
"null"
],
"description": "New Personal links still available in the current period, or null when no creation limit applies"
},
"newLinksResetAt": {
"type": [
"string",
"null"
],
"description": "ISO-8601 time when the Personal creation allowance resets, or null when no creation limit applies"
}
},
"required": [
"activeLinks",
"activeLinkLimit",
"remainingActiveLinks",
"newLinksThisPeriod",
"newLinkLimit",
"remainingNewLinks",
"newLinksResetAt"
],
"additionalProperties": false,
"description": "Personal link usage needed to answer the current action"
},
"limits": {
"type": "object",
"properties": {
"imagesPerSite": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Default hosted-image count per Personal website; matching websiteOverrides takes precedence"
},
"updatesPerLink": {
"type": [
"number",
"null"
],
"description": "Maximum updates per link, or null for unlimited"
},
"inactivityWindowDays": {
"type": [
"number",
"null"
],
"description": "Days after the owner last acts in Carryo before a link is taken offline; null when inactivity does not apply"
},
"revokedRecoveryDays": {
"type": "number",
"description": "Default recovery period after inactivity; manual unpublishing may not be reversible. Check the website policy and Carryo settings"
}
},
"required": [
"updatesPerLink",
"inactivityWindowDays",
"revokedRecoveryDays"
],
"additionalProperties": false,
"description": "Personal default policies; websiteOverrides takes precedence for the named websites"
}
},
"required": [
"capabilities",
"usage",
"limits"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π‘website.publish(forms, htmlContent, fileName, sharingMode, expiresAt, ...)
Publishes supplied HTML as a new public Carryo website for sharing a presentation, proposal, report, dashboard, invitation, portfolio, or landing page. Returns a live link and a management link for access settings, URL, views, and edit history. New Personal websites consume the account creation allowance. Personal is the default destination; workspaceId selects a user-chosen team. Supports an optional customSlug and hosted images. Pass attached images through imageFiles. For one attachment, assets needs only its relative website path; Carryo matches the attachment automatically. For multiple attachments, use fileIndex (0 for the first imageFiles entry). Do not invent file IDs or ask for a public URL when attachment upload is available. Known fileId references and fetchable HTTP(S) sourceUrl imports also work. Carryo imports and hosts its own copy. Base64 image bytes and data URLs are unsupported. Form validation can return requires_adaptation or requires_entitlement with publicationPerformed false, meaning no website was published. Supports HTML pages and their image assets, without general file storage or backend hosting.
Input Schema
{
"type": "object",
"properties": {
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
}
},
"required": [
"key",
"title",
"fields"
],
"additionalProperties": false
},
"maxItems": 5,
"description": "Optional definitions for JavaScript/React forms using window.CarryoForms.submit(key, values), which resolves on acceptance and rejects on failure. Stable keys and field names identify forms across edits. Static collection forms are inferred from data-carryo-form=\"key\" and named controls without duplicate definitions; placeholder submit handlers can block collection. Local calculator/filter forms use data-carryo-local and do not collect responses. Existing external endpoints retain their destination. Visitor acknowledgement is disabled unless explicitly enabled."
},
"htmlContent": {
"type": "string",
"minLength": 1,
"maxLength": 5242880,
"description": "Complete HTML for the page, presentation, slide deck, proposal, report, landing page, dashboard, invitation, portfolio, or one-page website to publish."
},
"fileName": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Short internal file name, for example client-proposal.html, board-deck.html, report.html, or landing-page.html."
},
"sharingMode": {
"type": "string",
"enum": [
"public"
],
"description": "Publishing mode for the Carryo page. Only public live links are supported here."
},
"expiresAt": {
"type": "string",
"description": "Optional ISO-8601 expiration timestamp"
},
"customSlug": {
"type": "string",
"minLength": 3,
"maxLength": 64,
"description": "Optional user-chosen URL ending using lowercase letters, numbers, and hyphens. An automatic URL is generated when omitted."
},
"workspaceId": {
"type": "string",
"pattern": "^ws_[A-Za-z0-9]+$",
"description": "Optional exact workspaceId of the Carryo team explicitly selected by the user. The default destination is Personal when omitted."
},
"imageFiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"file_id": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"mime_type": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"file_name": {
"type": "string",
"minLength": 1,
"maxLength": 1024
}
},
"required": [
"download_url",
"file_id"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image attachments supplied through the host's file upload support. The host supplies file_id and download_url. Map each attachment to a website path in assets: with one attachment, path alone is sufficient; with multiple attachments, use fileIndex. The assistant does not need to know generated file IDs or download URLs. Temporary URLs are import sources, not hosted image URLs. Clients without file input support can omit this field."
},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"contentType": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"fileId": {
"type": "string",
"minLength": 1,
"maxLength": 512,
"description": "Known attachment file_id matching an imageFiles entry. Prefer fileIndex if the host-generated ID is not visible. Mutually exclusive with fileIndex and sourceUrl."
},
"fileIndex": {
"type": "integer",
"minimum": 0,
"maximum": 19,
"description": "Zero-based position in imageFiles: 0 selects its first attachment. Use this when the host generates file IDs during upload. May be omitted when imageFiles contains exactly one attachment. Mutually exclusive with fileId and sourceUrl."
},
"sourceUrl": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Fetchable HTTP(S) image URL for Carryo to import and host. Mutually exclusive with fileId and fileIndex. Data URLs and base64 bytes are unsupported."
}
},
"required": [
"path"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image assets to add or replace. Each entry requires a relative website path. With one imageFiles attachment, path alone uses that attachment. Otherwise select exactly one source: fileIndex (zero-based imageFiles position), a known fileId, or a fetchable HTTP(S) sourceUrl. Never guess generated file IDs. Existing images are preserved when omitted; replacing an existing path does not use another slot. Base64 bytes and data URLs are unsupported."
}
},
"required": [
"htmlContent",
"fileName",
"sharingMode"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"customSlug": {
"type": [
"string",
"null"
],
"description": "Optional custom URL ending"
},
"shareUrl": {
"type": "string",
"description": "Primary share URL"
},
"manageUrl": {
"$ref": "#/properties/customSlug",
"description": "Carryo web-app URL for managing the link URL, password, views, and edit history"
},
"workspaceId": {
"$ref": "#/properties/customSlug",
"description": "Workspace that owns the link; omitted for Personal"
},
"alternateShareUrls": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Alternate share URLs, when available"
},
"expiresAt": {
"$ref": "#/properties/customSlug",
"description": "Optional ISO-8601 expiration timestamp"
},
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
},
"revision": {
"type": "number"
},
"state": {
"type": "string",
"enum": [
"active",
"draft",
"closed",
"unavailable"
]
},
"retentionDays": {
"type": "number"
},
"notifications": {
"type": "string",
"enum": [
"enabled",
"disabled",
"unavailable"
]
}
},
"required": [
"key",
"title",
"fields",
"revision",
"state",
"retentionDays",
"notifications"
],
"additionalProperties": false
}
},
"currentVersionNumber": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"requires_adaptation",
"requires_entitlement",
"unsupported",
"unavailable"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"publicationPerformed": {
"type": "boolean",
"const": false
},
"guidance": {
"type": "object",
"additionalProperties": {}
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π‘website.save_draft(forms, htmlContent, fileName, expiresAt, customSlug, ...)
Saves supplied HTML as a new private Carryo website draft for review before publication. Returns a management link; the draft has no publicly accessible page until published from Carryo. Passwords and restricted access are configured in the Carryo web app. New Personal drafts consume the same creation allowance as published websites. Personal is the default destination; workspaceId selects a user-chosen team. Pass attached images through imageFiles. For one attachment, assets needs only its relative website path; Carryo matches the attachment automatically. For multiple attachments, use fileIndex (0 for the first imageFiles entry). Do not invent file IDs or ask for a public URL when attachment upload is available. Known fileId references and fetchable HTTP(S) sourceUrl imports also work. Carryo imports and hosts its own copy. Base64 image bytes and data URLs are unsupported. Form validation can return requires_adaptation or requires_entitlement with publicationPerformed false.
Input Schema
{
"type": "object",
"properties": {
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
}
},
"required": [
"key",
"title",
"fields"
],
"additionalProperties": false
},
"maxItems": 5,
"description": "Optional definitions for JavaScript/React forms using window.CarryoForms.submit(key, values), which resolves on acceptance and rejects on failure. Stable keys and field names identify forms across edits. Static collection forms are inferred from data-carryo-form=\"key\" and named controls without duplicate definitions; placeholder submit handlers can block collection. Local calculator/filter forms use data-carryo-local and do not collect responses. Existing external endpoints retain their destination. Visitor acknowledgement is disabled unless explicitly enabled."
},
"htmlContent": {
"type": "string",
"minLength": 1,
"maxLength": 5242880,
"description": "Complete HTML for the private Carryo draft page, presentation, slide deck, proposal, report, landing page, dashboard, invitation, portfolio, or one-page website."
},
"fileName": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Short internal file name, for example client-proposal.html, board-deck.html, report.html, or landing-page.html."
},
"expiresAt": {
"type": "string",
"description": "Optional ISO-8601 expiration timestamp"
},
"customSlug": {
"type": "string",
"minLength": 3,
"maxLength": 64,
"description": "Optional user-chosen URL ending using lowercase letters, numbers, and hyphens. An automatic URL is generated when omitted."
},
"workspaceId": {
"type": "string",
"pattern": "^ws_[A-Za-z0-9]+$",
"description": "Optional exact workspaceId of the Carryo team explicitly selected by the user. The default destination is Personal when omitted."
},
"imageFiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"file_id": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"mime_type": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"file_name": {
"type": "string",
"minLength": 1,
"maxLength": 1024
}
},
"required": [
"download_url",
"file_id"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image attachments supplied through the host's file upload support. The host supplies file_id and download_url. Map each attachment to a website path in assets: with one attachment, path alone is sufficient; with multiple attachments, use fileIndex. The assistant does not need to know generated file IDs or download URLs. Temporary URLs are import sources, not hosted image URLs. Clients without file input support can omit this field."
},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"contentType": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"fileId": {
"type": "string",
"minLength": 1,
"maxLength": 512,
"description": "Known attachment file_id matching an imageFiles entry. Prefer fileIndex if the host-generated ID is not visible. Mutually exclusive with fileIndex and sourceUrl."
},
"fileIndex": {
"type": "integer",
"minimum": 0,
"maximum": 19,
"description": "Zero-based position in imageFiles: 0 selects its first attachment. Use this when the host generates file IDs during upload. May be omitted when imageFiles contains exactly one attachment. Mutually exclusive with fileId and sourceUrl."
},
"sourceUrl": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Fetchable HTTP(S) image URL for Carryo to import and host. Mutually exclusive with fileId and fileIndex. Data URLs and base64 bytes are unsupported."
}
},
"required": [
"path"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image assets to add or replace. Each entry requires a relative website path. With one imageFiles attachment, path alone uses that attachment. Otherwise select exactly one source: fileIndex (zero-based imageFiles position), a known fileId, or a fetchable HTTP(S) sourceUrl. Never guess generated file IDs. Existing images are preserved when omitted; replacing an existing path does not use another slot. Base64 bytes and data URLs are unsupported."
}
},
"required": [
"htmlContent",
"fileName"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"draftId": {
"type": "string",
"description": "Carryo private draft identifier"
},
"manageUrl": {
"type": "string",
"description": "Carryo URL where the user can review access settings and publish the draft"
},
"workspaceId": {
"type": [
"string",
"null"
],
"description": "Workspace that owns the draft; omitted for Personal"
},
"expiresAt": {
"$ref": "#/properties/workspaceId",
"description": "Optional ISO-8601 expiration timestamp"
},
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
},
"revision": {
"type": "number"
},
"state": {
"type": "string",
"enum": [
"active",
"draft",
"closed",
"unavailable"
]
},
"retentionDays": {
"type": "number"
},
"notifications": {
"type": "string",
"enum": [
"enabled",
"disabled",
"unavailable"
]
}
},
"required": [
"key",
"title",
"fields",
"revision",
"state",
"retentionDays",
"notifications"
],
"additionalProperties": false
}
},
"currentVersionNumber": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"requires_adaptation",
"requires_entitlement",
"unsupported",
"unavailable"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"publicationPerformed": {
"type": "boolean",
"const": false
},
"guidance": {
"type": "object",
"additionalProperties": {}
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π’website.read(linkId)
Reads the current HTML, version number, hosted-image metadata, image limits, and remaining image slots for an existing Carryo website or private draft. Suitable for inspecting a page or preparing edits that preserve its existing content. Returns image metadata rather than image files. Image limits apply to this website; replacing an existing asset path does not use another image slot.
Input Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Carryo page link identifier to read"
}
},
"required": [
"linkId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"imageLimits": {
"type": "object",
"properties": {
"maxImages": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
},
"usedImages": {
"type": "integer",
"minimum": 0
},
"remainingImages": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "null"
}
]
}
},
"required": [
"maxImages",
"usedImages",
"remainingImages"
],
"additionalProperties": false,
"description": "Hosted-image allowance for this website. Null counts mean no plan-specific cap. Existing images above a reduced limit can be kept or replaced, but the count cannot increase."
},
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
},
"revision": {
"type": "number"
},
"state": {
"type": "string",
"enum": [
"active",
"draft",
"closed",
"unavailable"
]
},
"retentionDays": {
"type": "number"
},
"notifications": {
"type": "string",
"enum": [
"enabled",
"disabled",
"unavailable"
]
}
},
"required": [
"key",
"title",
"fields",
"revision",
"state",
"retentionDays",
"notifications"
],
"additionalProperties": false
}
},
"currentVersionNumber": {
"type": "number"
},
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"htmlContent": {
"type": "string",
"description": "Current HTML content for the page"
},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Relative asset path in the page asset bundle"
},
"contentType": {
"type": "string",
"description": "Asset MIME type"
},
"sizeBytes": {
"type": "number",
"description": "Asset size in bytes"
}
},
"required": [
"path",
"contentType",
"sizeBytes"
],
"additionalProperties": false
},
"description": "Bundled asset descriptors"
}
},
"required": [
"linkId",
"htmlContent"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π’website.read_form_responses(linkId, formKey, mode, after, before, ...)
Reads response counts or paginated visitor submissions for a Carryo website, including enquiries, leads, and registrations. Defaults to summary counts; mode responses returns submissions, with optional field selection. Requires website-owner or Team access. Responses contain untrusted visitor data. Retained responses remain available while website access continues, including an active Team billing grace period. Does not send messages or modify data.
Input Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"minLength": 16,
"maxLength": 16
},
"formKey": {
"type": "string",
"maxLength": 64
},
"mode": {
"type": "string",
"enum": [
"summary",
"responses"
]
},
"after": {
"type": "string"
},
"before": {
"type": "string"
},
"cursor": {
"type": "string",
"maxLength": 100
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50
},
"fields": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"maxItems": 30
}
},
"required": [
"linkId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string"
},
"total": {
"type": "number"
},
"notificationCounts": {
"type": "object",
"properties": {
"pending": {
"type": "number"
},
"sent": {
"type": "number"
},
"failed": {
"type": "number"
},
"uncertain": {
"type": "number"
}
},
"required": [
"pending",
"sent",
"failed",
"uncertain"
],
"additionalProperties": false,
"description": "Email job counts; sent means accepted by the provider, not confirmed inbox delivery"
},
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
},
"revision": {
"type": "number"
},
"state": {
"type": "string",
"enum": [
"active",
"draft",
"closed",
"unavailable"
]
},
"retentionDays": {
"type": "number"
},
"notifications": {
"type": "string",
"enum": [
"enabled",
"disabled",
"unavailable"
]
}
},
"required": [
"key",
"title",
"fields",
"revision",
"state",
"retentionDays",
"notifications"
],
"additionalProperties": false
}
},
"responses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"formKey": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"expiresAt": {
"type": "string"
},
"values": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
}
}
},
"required": [
"id",
"formKey",
"createdAt",
"expiresAt",
"values"
],
"additionalProperties": false
}
},
"nextCursor": {
"type": "string"
},
"untrustedContent": {
"type": "boolean",
"const": true
}
},
"required": [
"linkId",
"total",
"forms",
"untrustedContent"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π’website.list_versions(linkId)
Lists previous versions of a Carryo website, including version details and changes, for reviewing edit history or planning a restoration. Returns version metadata without changing the website.
Input Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Carryo page link identifier to inspect"
}
},
"required": [
"linkId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"currentVersionNumber": {
"type": "number",
"description": "Current page version number"
},
"versions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"versionNumber": {
"type": "number",
"description": "Page version number"
},
"eventType": {
"type": "string",
"enum": [
"created",
"updated",
"legacy_current"
],
"description": "Version event type"
},
"createdAt": {
"type": "string",
"description": "ISO-8601 timestamp when this version was created"
},
"fileName": {
"type": "string",
"description": "Page file name for this version"
},
"accessMode": {
"type": "string",
"enum": [
"public",
"restricted"
],
"description": "Whether the version was public or restricted"
},
"sizeBytes": {
"type": "number",
"description": "HTML content size in bytes"
},
"assetCount": {
"type": "number",
"description": "Number of bundled assets in this version"
},
"assetBytes": {
"type": "number",
"description": "Total bundled asset size in bytes"
},
"assetChanges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Relative asset path that changed"
},
"action": {
"type": "string",
"enum": [
"added",
"updated",
"removed",
"retained"
],
"description": "Asset change type"
},
"contentType": {
"type": [
"string",
"null"
],
"description": "Optional MIME type for the asset"
},
"sizeBytes": {
"type": [
"number",
"null"
],
"description": "Current asset size in bytes"
},
"previousSizeBytes": {
"type": [
"number",
"null"
],
"description": "Previous asset size in bytes"
}
},
"required": [
"path",
"action"
],
"additionalProperties": false
},
"description": "Asset changes in this version"
},
"changeSummary": {
"$ref": "#/properties/versions/items/properties/assetChanges/items/properties/contentType",
"description": "Optional human-readable version change summary"
},
"isCurrent": {
"type": "boolean",
"description": "Whether this is the page current version"
}
},
"required": [
"linkId",
"versionNumber",
"eventType",
"createdAt",
"fileName",
"accessMode",
"sizeBytes",
"assetCount",
"assetBytes",
"assetChanges",
"isCurrent"
],
"additionalProperties": false
},
"description": "Page version history"
}
},
"required": [
"linkId",
"currentVersionNumber",
"versions"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π’website.read_version(linkId, versionNumber)
Reads the HTML and metadata of a specific previous Carryo website version for viewing, comparison, or restoration planning. Requires linkId and versionNumber. Reading a version does not restore it or change the current website.
Input Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Carryo page link identifier to read"
},
"versionNumber": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Specific page version number to read"
}
},
"required": [
"linkId",
"versionNumber"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
}
},
"required": [
"key",
"title",
"fields"
],
"additionalProperties": false
},
"description": "Form definitions belonging to this historical version, for comparison or restoration; not its current collection state"
},
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"versionNumber": {
"type": "number",
"description": "Page version number"
},
"htmlContent": {
"type": "string",
"description": "HTML content for the requested historical version"
},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Relative asset path in the page asset bundle"
},
"contentType": {
"type": "string",
"description": "Asset MIME type"
},
"sizeBytes": {
"type": "number",
"description": "Asset size in bytes"
}
},
"required": [
"path",
"contentType",
"sizeBytes"
],
"additionalProperties": false
},
"description": "Bundled asset descriptors"
}
},
"required": [
"linkId",
"versionNumber",
"htmlContent"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π΄website.edit_images(linkId, imageFiles, assets, removeAssetPaths)
Adds, replaces, or removes hosted images on an existing Carryo website without replacing its HTML. Reusing a path replaces that image without consuming another image slot; new paths are subject to the website image allowance. Returns hosted-image metadata and URLs. New paths appear in the page when referenced by its HTML. Pass attached images through imageFiles. For one attachment, assets needs only its relative website path; Carryo matches the attachment automatically. For multiple attachments, use fileIndex (0 for the first imageFiles entry). Do not invent file IDs or ask for a public URL when attachment upload is available. Known fileId references and fetchable HTTP(S) sourceUrl imports also work. Carryo imports and hosts its own copy. Base64 image bytes and data URLs are unsupported.
Input Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Carryo page link identifier to update"
},
"imageFiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"file_id": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"mime_type": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"file_name": {
"type": "string",
"minLength": 1,
"maxLength": 1024
}
},
"required": [
"download_url",
"file_id"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image attachments supplied through the host's file upload support. The host supplies file_id and download_url. Map each attachment to a website path in assets: with one attachment, path alone is sufficient; with multiple attachments, use fileIndex. The assistant does not need to know generated file IDs or download URLs. Temporary URLs are import sources, not hosted image URLs. Clients without file input support can omit this field."
},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"contentType": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"fileId": {
"type": "string",
"minLength": 1,
"maxLength": 512,
"description": "Known attachment file_id matching an imageFiles entry. Prefer fileIndex if the host-generated ID is not visible. Mutually exclusive with fileIndex and sourceUrl."
},
"fileIndex": {
"type": "integer",
"minimum": 0,
"maximum": 19,
"description": "Zero-based position in imageFiles: 0 selects its first attachment. Use this when the host generates file IDs during upload. May be omitted when imageFiles contains exactly one attachment. Mutually exclusive with fileId and sourceUrl."
},
"sourceUrl": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Fetchable HTTP(S) image URL for Carryo to import and host. Mutually exclusive with fileId and fileIndex. Data URLs and base64 bytes are unsupported."
}
},
"required": [
"path"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image assets to add or replace. Each entry requires a relative website path. With one imageFiles attachment, path alone uses that attachment. Otherwise select exactly one source: fileIndex (zero-based imageFiles position), a known fileId, or a fetchable HTTP(S) sourceUrl. Never guess generated file IDs. Existing images are preserved when omitted; replacing an existing path does not use another slot. Base64 bytes and data URLs are unsupported."
},
"removeAssetPaths": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"maxItems": 20,
"description": "Optional relative asset paths to remove from the page asset bundle."
}
},
"required": [
"linkId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"updatedAt": {
"type": "string",
"description": "ISO-8601 update timestamp"
},
"shareUrl": {
"type": "string",
"description": "Primary share URL"
},
"assetUrls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Relative asset path"
},
"assetUrl": {
"type": "string",
"description": "Relative URL where the page serves this asset"
}
},
"required": [
"path",
"assetUrl"
],
"additionalProperties": false
},
"description": "URLs for added or replaced assets"
},
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
},
"revision": {
"type": "number"
},
"state": {
"type": "string",
"enum": [
"active",
"draft",
"closed",
"unavailable"
]
},
"retentionDays": {
"type": "number"
},
"notifications": {
"type": "string",
"enum": [
"enabled",
"disabled",
"unavailable"
]
}
},
"required": [
"key",
"title",
"fields",
"revision",
"state",
"retentionDays",
"notifications"
],
"additionalProperties": false
}
},
"currentVersionNumber": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"requires_adaptation",
"requires_entitlement",
"unsupported",
"unavailable"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"publicationPerformed": {
"type": "boolean",
"const": false
},
"guidance": {
"type": "object",
"additionalProperties": {}
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π΄website.edit(expectedVersionNumber, forms, linkId, htmlContent, fileName, ...)
Replaces the complete HTML of an existing Carryo website while preserving its linkId and URL. Suitable for updating, fixing, or republishing a known page. Returns the website link and a Carryo management link. Access and edit limits are checked for the website identified by linkId. expectedVersionNumber detects conflicting edits. Supports adding or replacing hosted images and removing paths through removeAssetPaths. Pass attached images through imageFiles. For one attachment, assets needs only its relative website path; Carryo matches the attachment automatically. For multiple attachments, use fileIndex (0 for the first imageFiles entry). Do not invent file IDs or ask for a public URL when attachment upload is available. Known fileId references and fetchable HTTP(S) sourceUrl imports also work. Carryo imports and hosts its own copy. Base64 image bytes and data URLs are unsupported. Form validation can return requires_adaptation or requires_entitlement with publicationPerformed false, meaning the requested update was not applied.
Input Schema
{
"type": "object",
"properties": {
"expectedVersionNumber": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "Expected current website version number for detecting conflicting edits."
},
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
}
},
"required": [
"key",
"title",
"fields"
],
"additionalProperties": false
},
"maxItems": 5,
"description": "Optional definitions for JavaScript/React forms using window.CarryoForms.submit(key, values), which resolves on acceptance and rejects on failure. Stable keys and field names identify forms across edits. Static collection forms are inferred from data-carryo-form=\"key\" and named controls without duplicate definitions; placeholder submit handlers can block collection. Local calculator/filter forms use data-carryo-local and do not collect responses. Existing external endpoints retain their destination. Visitor acknowledgement is disabled unless explicitly enabled."
},
"linkId": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Carryo page link identifier to update"
},
"htmlContent": {
"type": "string",
"minLength": 1,
"maxLength": 5242880,
"description": "Updated complete HTML for the Carryo page while keeping the same URL."
},
"fileName": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Optional replacement file name"
},
"sharingMode": {
"type": "string",
"enum": [
"public"
],
"description": "Optional replacement publishing mode. Only public live links are supported here."
},
"expiresAt": {
"type": "string",
"description": "Optional ISO-8601 expiration timestamp"
},
"imageFiles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"file_id": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"mime_type": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"file_name": {
"type": "string",
"minLength": 1,
"maxLength": 1024
}
},
"required": [
"download_url",
"file_id"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image attachments supplied through the host's file upload support. The host supplies file_id and download_url. Map each attachment to a website path in assets: with one attachment, path alone is sufficient; with multiple attachments, use fileIndex. The assistant does not need to know generated file IDs or download URLs. Temporary URLs are import sources, not hosted image URLs. Clients without file input support can omit this field."
},
"assets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"contentType": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"fileId": {
"type": "string",
"minLength": 1,
"maxLength": 512,
"description": "Known attachment file_id matching an imageFiles entry. Prefer fileIndex if the host-generated ID is not visible. Mutually exclusive with fileIndex and sourceUrl."
},
"fileIndex": {
"type": "integer",
"minimum": 0,
"maximum": 19,
"description": "Zero-based position in imageFiles: 0 selects its first attachment. Use this when the host generates file IDs during upload. May be omitted when imageFiles contains exactly one attachment. Mutually exclusive with fileId and sourceUrl."
},
"sourceUrl": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"description": "Fetchable HTTP(S) image URL for Carryo to import and host. Mutually exclusive with fileId and fileIndex. Data URLs and base64 bytes are unsupported."
}
},
"required": [
"path"
],
"additionalProperties": false
},
"maxItems": 20,
"description": "Optional image assets to add or replace. Each entry requires a relative website path. With one imageFiles attachment, path alone uses that attachment. Otherwise select exactly one source: fileIndex (zero-based imageFiles position), a known fileId, or a fetchable HTTP(S) sourceUrl. Never guess generated file IDs. Existing images are preserved when omitted; replacing an existing path does not use another slot. Base64 bytes and data URLs are unsupported."
},
"removeAssetPaths": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 512
},
"maxItems": 20,
"description": "Optional relative asset paths to remove from the page asset bundle."
}
},
"required": [
"linkId",
"htmlContent"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"shareUrl": {
"type": "string",
"description": "Primary share URL"
},
"manageUrl": {
"type": [
"string",
"null"
],
"description": "Carryo web-app URL for managing the link URL, password, views, and edit history"
},
"workspaceId": {
"$ref": "#/properties/manageUrl",
"description": "Workspace that owns the link; omitted for Personal"
},
"alternateShareUrls": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Alternate share URLs, when available"
},
"updatedAt": {
"type": "string",
"description": "ISO-8601 update timestamp"
},
"expiresAt": {
"$ref": "#/properties/manageUrl",
"description": "Optional ISO-8601 expiration timestamp"
},
"forms": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9_-]{0,63}$"
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"type": {
"type": "string",
"enum": [
"text",
"email",
"tel",
"number",
"date",
"textarea",
"select",
"checkbox",
"radio"
]
},
"required": {
"type": "boolean"
},
"maxLength": {
"type": "integer",
"minimum": 1,
"maximum": 3000
},
"options": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"minItems": 1,
"maxItems": 100
}
},
"required": [
"name",
"label",
"type"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 30
},
"closed": {
"type": "boolean"
},
"notifyOwner": {
"type": "boolean"
},
"acknowledgementEmailField": {
"type": "string"
},
"revision": {
"type": "number"
},
"state": {
"type": "string",
"enum": [
"active",
"draft",
"closed",
"unavailable"
]
},
"retentionDays": {
"type": "number"
},
"notifications": {
"type": "string",
"enum": [
"enabled",
"disabled",
"unavailable"
]
}
},
"required": [
"key",
"title",
"fields",
"revision",
"state",
"retentionDays",
"notifications"
],
"additionalProperties": false
}
},
"currentVersionNumber": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"requires_adaptation",
"requires_entitlement",
"unsupported",
"unavailable"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"publicationPerformed": {
"type": "boolean",
"const": false
},
"guidance": {
"type": "object",
"additionalProperties": {}
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π’team.list
Lists Carryo teams accessible to the connected account, including team names, workspaceId values, roles, and available actions. Supports finding a team the user has chosen. Team creation, invitations, membership, and billing are managed in the Carryo web app.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"workspaces": {
"type": "array",
"items": {
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Stable Carryo workspace identifier to use in later tool calls"
},
"workspaceName": {
"type": "string",
"description": "User-facing Carryo workspace name"
},
"role": {
"type": "string",
"enum": [
"owner",
"editor"
],
"description": "The authenticated user role in this workspace"
},
"capabilities": {
"type": "object",
"properties": {
"canListLinks": {
"type": "boolean",
"description": "Whether workspace links can be listed"
},
"canPublishLinks": {
"type": "boolean",
"description": "Whether new workspace links can be published"
},
"canUpdateLinks": {
"type": "boolean",
"description": "Whether workspace links can be updated"
},
"canRevokeLinks": {
"type": "boolean",
"description": "Whether workspace links can be revoked"
}
},
"required": [
"canListLinks",
"canPublishLinks",
"canUpdateLinks",
"canRevokeLinks"
],
"additionalProperties": false,
"description": "Workspace actions currently available to the authenticated user"
}
},
"required": [
"workspaceId",
"workspaceName",
"role",
"capabilities"
],
"additionalProperties": false
},
"description": "Carryo workspaces the authenticated user can access"
}
},
"required": [
"workspaces"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π’website.list(workspaceId)
Lists the connected account's live Carryo websites and private drafts, with titles, linkIds, live links, status, and effective edit and inactivity policies. Suitable for finding a website by name. Returns Personal websites by default; workspaceId selects the user-chosen team's collection.
Input Schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"pattern": "^ws_[A-Za-z0-9]+$",
"description": "Optional exact workspaceId of the Carryo team selected by the user. Lists Personal websites when omitted."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"workspaceId": {
"type": [
"string",
"null"
],
"description": "Workspace whose links were listed; omitted for Personal"
},
"artifacts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"customSlug": {
"$ref": "#/properties/workspaceId",
"description": "Optional custom URL ending"
},
"fileName": {
"type": "string",
"description": "Page file name"
},
"publicationState": {
"type": "string",
"enum": [
"draft",
"published"
],
"description": "Whether the page is a private draft or published"
},
"accessMode": {
"type": "string",
"enum": [
"public",
"restricted"
],
"description": "Whether the page is public or restricted"
},
"expiresAt": {
"$ref": "#/properties/workspaceId",
"description": "Optional ISO-8601 expiration timestamp"
},
"isRevoked": {
"type": "boolean",
"description": "Whether the share link has been revoked"
},
"shareUrl": {
"$ref": "#/properties/workspaceId",
"description": "Primary share URL, omitted for private drafts"
},
"manageUrl": {
"$ref": "#/properties/workspaceId",
"description": "Carryo management URL for private drafts"
},
"alternateShareUrls": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Alternate share URLs, when available"
},
"policies": {
"type": "object",
"properties": {
"updatesPerLink": {
"type": [
"number",
"null"
],
"description": "This websiteβs update limit; null means unlimited subject to fair use"
},
"inactivityWindowDays": {
"type": [
"number",
"null"
],
"description": "Days since this websiteβs last owner edit or Keep live action; null means no inactivity expiry. Views and sign-in do not renew it"
},
"inactivityRevokesAt": {
"$ref": "#/properties/workspaceId",
"description": "Inactivity deadline; a separately set expiresAt can take the website offline earlier"
},
"canReactivate": {
"type": "boolean",
"description": "Whether restoration is currently supported in Carryo, subject to available capacity"
}
},
"required": [
"updatesPerLink",
"inactivityWindowDays",
"canReactivate"
],
"additionalProperties": false,
"description": "Actual per-website policy; use this instead of Personal account defaults"
}
},
"required": [
"linkId",
"fileName",
"publicationState",
"accessMode",
"isRevoked"
],
"additionalProperties": false
},
"description": "Carryo pages owned by the authenticated user"
},
"total": {
"type": "number",
"description": "Total page count before pagination"
},
"limit": {
"type": "number",
"description": "Pagination limit used by the response"
},
"offset": {
"type": "number",
"description": "Pagination offset used by the response"
}
},
"required": [
"artifacts",
"total",
"limit",
"offset"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}π΄website.unpublish(linkId)
Unpublishes an existing Carryo website so viewers immediately lose access through its shared link. Recovery availability depends on the website and is shown in Carryo. Unpublishing does not cancel a subscription.
Input Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Carryo page link identifier to take offline"
}
},
"required": [
"linkId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"linkId": {
"type": "string",
"description": "Carryo page link identifier"
},
"revokedAt": {
"type": "string",
"description": "ISO-8601 revocation timestamp"
},
"deleteAt": {
"type": "string",
"description": "ISO-8601 deletion timestamp"
}
},
"required": [
"linkId",
"revokedAt",
"deleteAt"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence