block.add
ActiveTool of Create Web Page
Append a new content block to a link-in-bio page. The block must match one of the 13 allowed types (link, social_row, whatsapp, phone_call, email_contact, image, gallery, video_embed, text, map_embed, product_card, lead_form, reviews) with that type's strict props. The server generates the block id and returns it in the response. For already-published pages, this saves an unpublished latest revision only. Do not call page.publish in the same assistant turn after this edit. Stop and tell the user the draft/preview was updated, then wait for a separate user message that explicitly asks to update the live link, publish, or make the changes public before calling page.publish. Do NOT call page.unpublish either — the live page should stay public; only unpublish when the user explicitly asks to take it down. The response includes nextSteps: after adding a block, share these hints with the user so they know what else would make the page more complete.
Parameters schema
{
"type": "object",
"required": [
"pageId",
"block"
],
"properties": {
"block": {
"type": "object",
"oneOf": [
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"link"
],
"type": "string",
"description": "Use this variant only for a link block."
},
"props": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "Destination URL using http, https, mailto, tel, or sms."
},
"icon": {
"type": "string",
"maxLength": 64
},
"label": {
"type": "string",
"maxLength": 120
},
"highlight": {
"type": "boolean"
},
"thumbnail": {
"type": "object",
"required": [
"src"
],
"properties": {
"alt": {
"type": "string",
"description": "Alt text for accessibility."
},
"src": {
"type": "string",
"description": "Image URL or stored media URL."
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"variants": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"mediaAssetId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
},
"description": "A tappable button with a label and URL. Optional thumbnail and icon.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"social_row"
],
"type": "string",
"description": "Use this variant only for a social_row block."
},
"props": {
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"platform",
"url"
],
"properties": {
"url": {
"type": "string",
"description": "Public http(s) social/profile URL."
},
"label": {
"type": "string",
"maxLength": 64
},
"platform": {
"enum": [
"instagram",
"tiktok",
"youtube",
"x",
"facebook",
"linkedin",
"spotify",
"apple_music",
"soundcloud",
"github",
"pinterest",
"threads",
"twitch",
"discord",
"telegram",
"snapchat",
"vimeo",
"behance",
"dribbble",
"medium",
"substack",
"website",
"other"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 16
}
},
"additionalProperties": false
}
},
"description": "A compact row of social icons. Items are { platform, url }.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"whatsapp"
],
"type": "string",
"description": "Use this variant only for a whatsapp block."
},
"props": {
"type": "object",
"required": [
"number"
],
"properties": {
"label": {
"type": "string",
"maxLength": 120
},
"number": {
"type": "string",
"maxLength": 32,
"description": "Public WhatsApp phone number."
},
"message": {
"type": "string",
"maxLength": 500,
"description": "Optional prefilled message."
}
},
"additionalProperties": false
}
},
"description": "WhatsApp CTA. Requires a WhatsApp number (digits only).",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"phone_call"
],
"type": "string",
"description": "Use this variant only for a phone_call block."
},
"props": {
"type": "object",
"required": [
"number"
],
"properties": {
"label": {
"type": "string",
"maxLength": 120
},
"number": {
"type": "string",
"maxLength": 32,
"description": "Public phone number."
}
},
"additionalProperties": false
}
},
"description": "Tel: button. Requires a phone number.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"email_contact"
],
"type": "string",
"description": "Use this variant only for a email_contact block."
},
"props": {
"type": "object",
"required": [
"email"
],
"properties": {
"email": {
"type": "string",
"description": "Public business email address."
},
"label": {
"type": "string",
"maxLength": 120
},
"subject": {
"type": "string",
"maxLength": 160
}
},
"additionalProperties": false
}
},
"description": "Mailto: button. Requires an email address.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"image"
],
"type": "string",
"description": "Use this variant only for a image block."
},
"props": {
"type": "object",
"required": [
"image"
],
"properties": {
"image": {
"type": "object",
"required": [
"src"
],
"properties": {
"alt": {
"type": "string",
"description": "Alt text for accessibility."
},
"src": {
"type": "string",
"description": "Image URL or stored media URL."
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"variants": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"mediaAssetId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"layout": {
"enum": [
"classic",
"wide",
"background"
],
"type": "string"
},
"caption": {
"type": "string",
"maxLength": 280
},
"link_url": {
"type": "string",
"maxLength": 2048
}
},
"additionalProperties": false
}
},
"description": "A single image with layout classic | wide | background.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"gallery"
],
"type": "string",
"description": "Use this variant only for a gallery block."
},
"props": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"src"
],
"properties": {
"alt": {
"type": "string",
"description": "Alt text for accessibility."
},
"src": {
"type": "string",
"description": "Image URL or stored media URL."
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"variants": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"mediaAssetId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"maxItems": 24
},
"display": {
"enum": [
"grid",
"carousel"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"description": "Multiple images in a grid or carousel.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"video_embed"
],
"type": "string",
"description": "Use this variant only for a video_embed block."
},
"props": {
"type": "object",
"required": [
"provider",
"video_id"
],
"properties": {
"title": {
"type": "string",
"maxLength": 160
},
"provider": {
"enum": [
"youtube",
"vimeo",
"mp4"
],
"type": "string"
},
"video_id": {
"type": "string",
"maxLength": 2048,
"description": "Video id or URL, depending on provider."
},
"thumbnail": {
"type": "object",
"required": [
"src"
],
"properties": {
"alt": {
"type": "string",
"description": "Alt text for accessibility."
},
"src": {
"type": "string",
"description": "Image URL or stored media URL."
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"variants": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"mediaAssetId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
},
"description": "YouTube, Vimeo, or mp4. Use normalized provider + video_id.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"text"
],
"type": "string",
"description": "Use this variant only for a text block."
},
"props": {
"type": "object",
"properties": {
"body": {
"type": "string",
"maxLength": 2000
},
"items": {
"type": "array",
"items": {
"type": "string",
"maxLength": 280
},
"maxItems": 12
},
"heading": {
"type": "string",
"maxLength": 160
},
"alignment": {
"enum": [
"left",
"center"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"description": "A short final-audience heading, body, and/or list block.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"map_embed"
],
"type": "string",
"description": "Use this variant only for a map_embed block."
},
"props": {
"type": "object",
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90
},
"lng": {
"type": "number",
"maximum": 180,
"minimum": -180
},
"zoom": {
"type": "number",
"maximum": 20,
"minimum": 1
},
"label": {
"type": "string",
"maxLength": 160
},
"address": {
"type": "string",
"maxLength": 400,
"description": "Public business address or service-area text."
},
"place_id": {
"type": "string",
"maxLength": 160
}
},
"additionalProperties": false
}
},
"description": "Google Maps embed by address, place_id, or lat/lng.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"product_card"
],
"type": "string",
"description": "Use this variant only for a product_card block."
},
"props": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 160
},
"image": {
"type": "object",
"required": [
"src"
],
"properties": {
"alt": {
"type": "string",
"description": "Alt text for accessibility."
},
"src": {
"type": "string",
"description": "Image URL or stored media URL."
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"variants": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"mediaAssetId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"buy_url": {
"type": "string",
"description": "Public http(s) purchase URL."
},
"cta_label": {
"type": "string",
"maxLength": 120
},
"price_text": {
"type": "string",
"maxLength": 40
},
"description": {
"type": "string",
"maxLength": 280
}
},
"additionalProperties": false
}
},
"description": "A link-out commerce card with name, image, price, and buy URL.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"lead_form"
],
"type": "string",
"description": "Use this variant only for a lead_form block."
},
"props": {
"type": "object",
"required": [
"mode",
"fields"
],
"properties": {
"mode": {
"enum": [
"contact",
"newsletter",
"booking_interest"
],
"type": "string"
},
"title": {
"type": "string",
"maxLength": 160
},
"fields": {
"type": "array",
"items": {
"enum": [
"name",
"email",
"phone",
"message",
"company"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1
},
"description": {
"type": "string",
"maxLength": 280
},
"consent_text": {
"type": "string",
"maxLength": 400
},
"field_labels": {
"type": "object",
"description": "Public labels/placeholders for form fields in the page's target language.",
"additionalProperties": {
"type": "string",
"maxLength": 120
}
},
"submit_label": {
"type": "string",
"maxLength": 120
},
"success_message": {
"type": "string",
"maxLength": 280
},
"destination_email": {
"type": "string",
"description": "Public/business lead recipient email."
},
"destination_webhook": {
"type": "string",
"description": "Public http(s) webhook URL."
}
},
"additionalProperties": false
}
},
"description": "Capture form. mode: contact | newsletter | booking_interest. Supply field labels and submit text for localized public pages.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"props"
],
"properties": {
"type": {
"enum": [
"reviews"
],
"type": "string",
"description": "Use this variant only for a reviews block."
},
"props": {
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"author",
"body"
],
"properties": {
"body": {
"type": "string",
"maxLength": 280
},
"role": {
"type": "string",
"maxLength": 120
},
"author": {
"type": "string",
"maxLength": 64
},
"avatar": {
"type": "object",
"required": [
"src"
],
"properties": {
"alt": {
"type": "string",
"description": "Alt text for accessibility."
},
"src": {
"type": "string",
"description": "Image URL or stored media URL."
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"variants": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"mediaAssetId": {
"type": "string",
"format": "uuid"
}
},
"additionalProperties": false
},
"rating": {
"type": "number",
"maximum": 5,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 12
},
"display": {
"enum": [
"carousel",
"stack"
],
"type": "string"
}
},
"additionalProperties": false
}
},
"description": "Carousel or stack of testimonials.",
"additionalProperties": false
}
],
"description": "The block to add. Must match one of the 13 allowed types with that type's strict props schema. The server generates the block id."
},
"pageId": {
"type": "string",
"format": "uuid"
},
"editToken": {
"type": "string"
}
},
"additionalProperties": false
}Parent server
Create Web Page
https://github.com/daniel-lopez-puig/landings
1/7 registries