{ "$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 theme field\nselects the card type and determines which fields are required. For a quick reference of\nrequired and optional fields per theme, see the Available Themes table in the overview above.\n

\nPoll card fields\n\nModern Inline card fields\n\nPrompt card fields\n\nButton fields (applicable to modern-inline and prompt themes)\n\nNote: To render supporting structured content such as tables, lists, or labelled records alongside a card,\nuse the top-level slides array in the message payload. slides is independent of the card object\nand can be combined with any card theme. For details on supported slide formats, see\nMessage Content.\n", "required": [ "theme", "title" ], "properties": { "theme": { "type": "string", "enum": [ "poll", "modern-inline", "prompt" ], "description": "Card theme identifier. Determines the card type to render.
\nAllowed values:
\n\n", "example": "poll" }, "title": { "type": "string", "maxLength": 200, "description": "The card header or question text displayed at the top of the card.
\nMaximum length: 200 characters.\n", "example": "Where should we have the team lunch?" }, "options": { "type": "array", "minItems": 2, "maxItems": 10, "description": "Applicable for poll theme only.
\nList of voting options. Each option is rendered as a selectable row with a live vote count and percentage bar.
\nMinimum: 2 options. Maximum: 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": "Applicable for modern-inline theme only.
\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": "Applicable for modern-inline theme only.
\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": "Applicable for modern-inline and prompt themes.
\nList of action buttons rendered inside the card. Each button executes an action when clicked by the user.
\nMaximum: 5 buttons. Minimum 1 required for prompt.\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 action.", "required": [ "label", "action" ], "properties": { "label": { "type": "string", "maxLength": 30, "description": "Display text shown on the button.
\nMaximum length: 30 characters.\n", "example": "Approve" }, "action": { "type": "object", "description": "Defines the action executed when the button is clicked. The type field determines the action category and the expected structure of the data 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.
\nAllowed values:
\n\n", "example": "invoke.function" }, "data": { "type": "object", "additionalProperties": true, "description": "Payload passed to the action handler. The expected fields depend on type:
\n\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.\nslides is a top-level field in the message payload - it sits alongside\ntext and card, and is not nested inside card.\n

\nMultiple slide blocks can be included in a single message, and they are rendered in the\norder they appear in the array. slides is most commonly paired with the\nmodern-inline 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

\nEach slide block requires a type field that determines how the content is rendered,\nan optional title heading, and a data payload whose structure\ndepends on the slide type.\n

\nSupported slide types\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
TypeRendersdata structure
tableA data table with column headers and rows.Object with headers (array of strings) and rows (array of objects where each key maps to a header).
listA bulleted list of items.Array of strings, each representing one list item.
labelKey-value pairs in a definition-list style.Array of objects, each with label (string) and value (string).
imagesOne or more inline images.Array of publicly accessible HTTPS image URL strings.
textA plain or formatted text block.A string containing the text content to display.
\n
\nFor full details on each slide type, including field-level descriptions and payload examples,\nrefer to Message Content.\n", "items": { "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "table", "list", "label", "images", "text" ], "description": "The slide content type. Determines how the data payload is rendered.
\nAllowed values:
\n\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 type:
\n\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 } } }