Zoho Cliq · Schema

Zoho Cliq Messagecards Schemas

MessagingTeam CollaborationChatBotsWebhooksSlash CommandsCommunication
View JSON Schema on GitHub

JSON Schema

messagecards.json Raw ↑
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Zoho Cliq Messagecards Schemas",
  "definitions": {
    "CardObject": {
      "type": "object",
      "description": "Defines the interactive card to be rendered inside the message. The <code>theme</code> field\nselects the card type and determines which fields are required. For a quick reference of\nrequired and optional fields per theme, see the <a href=\"#available-themes\"><b>Available Themes</b></a> table in the overview above.\n<br><br>\n<b>Poll card fields</b>\n<ul>\n  <li><b>theme</b> <code>string</code>: Must be <code>poll</code>.</li>\n  <li><b>title</b> <code>string</code>: The poll question displayed at the top of the card. Maximum 200 characters.</li>\n  <li><b>options</b> <code>array</code>: List of voting choices. Minimum 2, maximum 10 items.\n    <ul>\n      <li><b>options[].text</b> <code>string</code>: Display label for the poll option. Maximum 100 characters.</li>\n    </ul>\n  </li>\n</ul>\n<b>Modern Inline card fields</b>\n<ul>\n  <li><b>theme</b> <code>string</code>: Must be <code>modern-inline</code>.</li>\n  <li><b>title</b> <code>string</code>: Card header text displayed at the top of the card. Maximum 200 characters.</li>\n  <li><b>thumbnail</b> <code>string</code>: Optional. Publicly accessible HTTPS URL of a thumbnail image shown in the card header.</li>\n  <li><b>sections</b> <code>array</code>: Optional. One or more labeled field sections displayed in the card body. Each section groups related key-value pairs under an optional heading.\n    <ul>\n      <li><b>sections[].title</b> <code>string</code>: Optional section heading displayed above the fields.</li>\n      <li><b>sections[].fields</b> <code>array</code>: List of key-value field pairs.\n        <ul>\n          <li><b>fields[].title</b> <code>string</code>: Field label (key).</li>\n          <li><b>fields[].value</b> <code>string</code>: Field value.</li>\n        </ul>\n      </li>\n    </ul>\n  </li>\n  <li><b>buttons</b> <code>array</code>: Optional. Action buttons rendered at the bottom of the card. Maximum 5. See <b>Button fields</b> below.</li>\n</ul>\n<b>Prompt card fields</b>\n<ul>\n  <li><b>theme</b> <code>string</code>: Must be <code>prompt</code>.</li>\n  <li><b>title</b> <code>string</code>: The prompt question or alert text presented to the user. Maximum 200 characters.</li>\n  <li><b>buttons</b> <code>array</code>: Action buttons for the user to respond with. Minimum 1, maximum 5. See <b>Button fields</b> below.</li>\n</ul>\n<b>Button fields</b> (applicable to <code>modern-inline</code> and <code>prompt</code> themes)\n<ul>\n  <li><b>buttons[].label</b> <code>string</code>: Text displayed on the button. Maximum 30 characters.</li>\n  <li><b>buttons[].action.type</b> <code>string</code>: Determines how Cliq handles the button click.\n    <ul>\n      <li><code>open.url</code>: Opens a URL in the user's default browser. Requires <code>action.data.web</code> (string).</li>\n      <li><code>invoke.function</code>: Triggers a Cliq Function by name. Requires <code>action.data.name</code> (string).</li>\n      <li><code>system.api</code>: Calls a Cliq internal system API. Requires <code>action.data.api</code> (string).</li>\n      <li><code>invoke.bot</code>: Sends a message to a bot. Requires <code>action.data.bot_name</code> and <code>action.data.message</code>.</li>\n      <li><code>preview.url</code>: Opens a URL inside a Cliq preview panel without leaving the conversation. Requires <code>action.data.web</code> (string).</li>\n    </ul>\n  </li>\n  <li><b>buttons[].action.data</b> <code>object</code>: The payload passed to the action handler. Expected fields depend on <code>action.type</code> as listed above.</li>\n</ul>\n<b>Note:</b> To render supporting structured content such as tables, lists, or labelled records alongside a card,\nuse the top-level <code>slides</code> array in the message payload. <code>slides</code> is independent of the <code>card</code> object\nand can be combined with any card theme. For details on supported slide formats, see\n<a href=\"https://www.zoho.com/cliq/help/restapi/v3/#Message_Content\" target=\"_blank\">Message Content</a>.\n",
      "required": [
        "theme",
        "title"
      ],
      "properties": {
        "theme": {
          "type": "string",
          "enum": [
            "poll",
            "modern-inline",
            "prompt"
          ],
          "description": "Card theme identifier. Determines the card type to render.<br>\n<b>Allowed values</b>:<br>\n<ul>\n  <li><code>poll</code>: Renders a poll card with voting options, live vote counts, and percentages.</li>\n  <li><code>modern-inline</code>: Renders a rich inline card with a header, optional field sections, and action buttons.</li>\n  <li><code>prompt</code>: Renders a focused prompt card with a question and quick-reply action buttons.</li>\n</ul>\n",
          "example": "poll"
        },
        "title": {
          "type": "string",
          "maxLength": 200,
          "description": "The card header or question text displayed at the top of the card.<br>\n<b>Maximum length</b>: 200 characters.\n",
          "example": "Where should we have the team lunch?"
        },
        "options": {
          "type": "array",
          "minItems": 2,
          "maxItems": 10,
          "description": "<i>Applicable for <code>poll</code> theme only.</i><br>\nList of voting options. Each option is rendered as a selectable row with a live vote count and percentage bar.<br>\n<b>Minimum</b>: 2 options. <b>Maximum</b>: 10 options.\n",
          "items": {
            "type": "object",
            "required": [
              "text"
            ],
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 100,
                "description": "Display label for the poll option. Maximum 100 characters.",
                "example": "Italian"
              }
            }
          }
        },
        "thumbnail": {
          "type": "string",
          "description": "<i>Applicable for <code>modern-inline</code> theme only.</i><br>\nURL of an image to display as a thumbnail in the card header. Must be a publicly accessible HTTPS URL.\n",
          "example": "https://www.zoho.com/cliq/help/restapi/images/poll_icon.png"
        },
        "sections": {
          "type": "array",
          "description": "<i>Applicable for <code>modern-inline</code> theme only.</i><br>\nList of field sections. Each section groups related labeled key-value fields under an optional section title.\n",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string",
                "description": "Optional section heading displayed above the fields.",
                "example": "Summary"
              },
              "fields": {
                "type": "array",
                "description": "List of key-value field pairs displayed in this section.",
                "items": {
                  "type": "object",
                  "required": [
                    "title",
                    "value"
                  ],
                  "properties": {
                    "title": {
                      "type": "string",
                      "description": "Field label (key).",
                      "example": "Account"
                    },
                    "value": {
                      "type": "string",
                      "description": "Field value.",
                      "example": "Zylker Corp"
                    }
                  }
                }
              }
            }
          }
        },
        "buttons": {
          "type": "array",
          "maxItems": 5,
          "description": "<i>Applicable for <code>modern-inline</code> and <code>prompt</code> themes.</i><br>\nList of action buttons rendered inside the card. Each button executes an action when clicked by the user.<br>\n<b>Maximum</b>: 5 buttons. Minimum 1 required for <code>prompt</code>.\n",
          "items": {
            "$ref": "#/components/schemas/CardButton"
          }
        }
      }
    },
    "CardButton": {
      "type": "object",
      "description": "An action button rendered inside a Message Card. When clicked by a user, the button executes the specified <code>action</code>.",
      "required": [
        "label",
        "action"
      ],
      "properties": {
        "label": {
          "type": "string",
          "maxLength": 30,
          "description": "Display text shown on the button.<br>\n<b>Maximum length</b>: 30 characters.\n",
          "example": "Approve"
        },
        "action": {
          "type": "object",
          "description": "Defines the action executed when the button is clicked. The <code>type</code> field determines the action category and the expected structure of the <code>data</code> payload.\n",
          "required": [
            "type",
            "data"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "open.url",
                "invoke.function",
                "system.api",
                "invoke.bot",
                "preview.url"
              ],
              "description": "The action type. Determines how Cliq handles the button click.<br>\n<b>Allowed values</b>:<br>\n<ul>\n  <li><code>open.url</code>: Opens a URL in the user's default browser. Requires <code>action.data.web</code> (string).</li>\n  <li><code>invoke.function</code>: Triggers a Cliq Function by name. Requires <code>action.data.name</code> (string).</li>\n  <li><code>system.api</code>: Calls a Cliq internal system API. Requires <code>action.data.api</code> (string).</li>\n  <li><code>invoke.bot</code>: Sends a message to a bot. Requires <code>action.data.bot_name</code> and <code>action.data.message</code>.</li>\n  <li><code>preview.url</code>: Opens a URL inside a Cliq preview panel without leaving the conversation. Requires <code>action.data.web</code> (string).</li>\n</ul>\n",
              "example": "invoke.function"
            },
            "data": {
              "type": "object",
              "additionalProperties": true,
              "description": "Payload passed to the action handler. The expected fields depend on <code>type</code>:<br>\n<ul>\n  <li><b>open.url</b>: Requires <code>web</code> (string - the URL to open).</li>\n  <li><b>invoke.function</b>: Requires <code>name</code> (string - Cliq Function name).</li>\n  <li><b>system.api</b>: Requires <code>api</code> (string - the internal API path).</li>\n  <li><b>invoke.bot</b>: Requires <code>bot_name</code> and <code>message</code>.</li>\n  <li><b>preview.url</b>: Requires <code>web</code> (string - the URL to preview).</li>\n</ul>\n",
              "example": {
                "name": "ack_alert"
              }
            }
          }
        }
      }
    },
    "MessageResponse": {
      "type": "object",
      "description": "Response returned after a message card is successfully posted.",
      "properties": {
        "url": {
          "type": "string",
          "description": "Endpoint URL associated with the response.",
          "example": "/api/v3/channels/announcements/message"
        },
        "type": {
          "type": "string",
          "description": "Resource type of the response.",
          "example": "message"
        },
        "data": {
          "type": "object",
          "description": "Payload containing the posted message details.",
          "properties": {
            "id": {
              "type": "string",
              "description": "Unique identifier of the posted message.",
              "example": "1701234567890_1234567890"
            },
            "card": {
              "type": "object",
              "description": "The card object as stored by Cliq after posting.",
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        }
      }
    },
    "Slides": {
      "type": "array",
      "description": "An array of structured content blocks rendered below the card inside the message.\n<code>slides</code> is a top-level field in the message payload - it sits alongside\n<code>text</code> and <code>card</code>, and is <b>not</b> nested inside <code>card</code>.\n<br><br>\nMultiple slide blocks can be included in a single message, and they are rendered in the\norder they appear in the array. <code>slides</code> is most commonly paired with the\n<code>modern-inline</code> card theme to display supporting data such as tables, lists,\nor labelled records alongside the card header, but it is compatible with all card themes.\n<br><br>\nEach slide block requires a <code>type</code> field that determines how the content is rendered,\nan optional <code>title</code> heading, and a <code>data</code> payload whose structure\ndepends on the slide type.\n<br><br>\n<b>Supported slide types</b>\n<table style=\"border-collapse: collapse; width: 100%; font-family: inherit;\">\n  <tr>\n    <th style=\"padding: 8px; text-align: left; border: 1px solid #ddd; font-family: inherit;\">Type</th>\n    <th style=\"padding: 8px; text-align: left; border: 1px solid #ddd; font-family: inherit;\">Renders</th>\n    <th style=\"padding: 8px; text-align: left; border: 1px solid #ddd; font-family: inherit;\"><code>data</code> structure</th>\n  </tr>\n  <tr>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\"><a href=\"https://www.zoho.com/cliq/help/restapi/v3/#table\" target=\"_blank\"><code>table</code></a></td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">A data table with column headers and rows.</td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">Object with <code>headers</code> (array of strings) and <code>rows</code> (array of objects where each key maps to a header).</td>\n  </tr>\n  <tr>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\"><a href=\"https://www.zoho.com/cliq/help/restapi/v3/#list\" target=\"_blank\"><code>list</code></a></td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">A bulleted list of items.</td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">Array of strings, each representing one list item.</td>\n  </tr>\n  <tr>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\"><a href=\"https://www.zoho.com/cliq/help/restapi/v3/#label\" target=\"_blank\"><code>label</code></a></td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">Key-value pairs in a definition-list style.</td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">Array of objects, each with <code>label</code> (string) and <code>value</code> (string).</td>\n  </tr>\n  <tr>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\"><a href=\"https://www.zoho.com/cliq/help/restapi/v3/#image\" target=\"_blank\"><code>images</code></a></td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">One or more inline images.</td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">Array of publicly accessible HTTPS image URL strings.</td>\n  </tr>\n  <tr>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\"><a href=\"https://www.zoho.com/cliq/help/restapi/v3/#text\" target=\"_blank\"><code>text</code></a></td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">A plain or formatted text block.</td>\n    <td style=\"padding: 8px; border: 1px solid #ddd;\">A string containing the text content to display.</td>\n  </tr>\n</table>\n<br>\nFor full details on each slide type, including field-level descriptions and payload examples,\nrefer to <a href=\"https://www.zoho.com/cliq/help/restapi/v3/#Message_Content\" target=\"_blank\">Message Content</a>.\n",
      "items": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "table",
              "list",
              "label",
              "images",
              "text"
            ],
            "description": "The slide content type. Determines how the <code>data</code> payload is rendered.<br>\n<b>Allowed values</b>:<br>\n<ul>\n  <li><code>table</code>: Renders a data table with column headers and rows.</li>\n  <li><code>list</code>: Renders a bulleted list of items.</li>\n  <li><code>label</code>: Renders key-value pairs in a definition-list style.</li>\n  <li><code>images</code>: Renders one or more inline images from HTTPS URLs.</li>\n  <li><code>text</code>: Renders a plain or formatted text block.</li>\n</ul>\n",
            "example": "table"
          },
          "title": {
            "type": "string",
            "description": "Optional heading displayed above the slide content.",
            "example": "Ticket Details"
          },
          "data": {
            "description": "Content payload for the slide. Structure depends on <code>type</code>:<br>\n<ul>\n  <li><b>table</b>: Object with <code>headers</code> (array of strings) and <code>rows</code> (array of objects).</li>\n  <li><b>list</b>: Array of strings.</li>\n  <li><b>label</b>: Array of objects, each with <code>label</code> and <code>value</code>.</li>\n  <li><b>images</b>: Array of image URL strings.</li>\n  <li><b>text</b>: A string containing the text content to display.</li>\n</ul>\n",
            "example": {
              "headers": [
                "Field",
                "Value"
              ],
              "rows": [
                {
                  "Field": "Ticket ID",
                  "Value": "#TKT-00892"
                },
                {
                  "Field": "Priority",
                  "Value": "Critical"
                }
              ]
            }
          }
        }
      }
    },
    "NoResponse": {
      "type": "object",
      "description": "Represents an empty successful response where no payload is returned.",
      "properties": {
        "Response Code": {
          "type": "string",
          "description": "HTTP response code indicating no content is returned.",
          "example": "204 No response"
        }
      }
    },
    "GenericResponse": {
      "type": "object",
      "description": "Generic successful response envelope.",
      "properties": {
        "url": {
          "type": "string",
          "description": "Endpoint URL associated with the response."
        },
        "type": {
          "type": "string",
          "description": "Resource type returned by the API."
        },
        "data": {
          "type": "object",
          "description": "Resource payload.",
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    }
  }
}