{ "openapi": "3.0.2", "info": { "title": "Klaviyo API", "version": "2026-07-15", "description": "The Klaviyo REST API. Please visit https://developers.klaviyo.com for more details.", "contact": { "name": "Klaviyo Developer Experience Team", "email": "developers@klaviyo.com", "url": "https://developers.klaviyo.com" }, "termsOfService": "https://www.klaviyo.com/legal/api-terms", "license": { "name": "License", "url": "https://www.klaviyo.com/legal" } }, "servers": [ { "url": "https://a.klaviyo.com", "description": "Production" } ], "security": [ { "Klaviyo-API-Key": [] } ], "paths": { "/api/conversation-messages": { "post": { "operationId": "create_conversation_message", "summary": "Create Conversation Message", "description": "Send an outbound message to a conversation.\n\nRequires account-level enablement. To request access, reach out in the [developer community](https://community.klaviyo.com/groups/developer-group-64).

*Rate limits*:
Burst: `3/s`
Steady: `60/m`\n\n**Scopes:**\n`conversations:write`\n\n[OpenAPI Spec](https://raw.githubusercontent.com/klaviyo/openapi/main/openapi/stable/apis/create_conversation_message.json)", "parameters": [ { "name": "revision", "in": "header", "description": "API endpoint revision (format: YYYY-MM-DD[.suffix])", "required": true, "schema": { "type": "string", "default": "2026-07-15" } } ], "requestBody": { "description": "Create a conversation message", "required": true, "content": { "application/vnd.api+json": { "schema": { "$ref": "#/components/schemas/ConversationMessageCreateQuery" } } } }, "responses": { "202": { "description": "Success" }, "4XX": { "$ref": "#/components/responses/ClientError" }, "5XX": { "$ref": "#/components/responses/ServerError" } }, "tags": [ "Conversations" ], "x-klaviyo-pre-release": "None", "x-klaviyo-ratelimit": { "burst": "3/s", "steady": "60/m" }, "x-klaviyo-scopes": [ "conversations:write" ] } } }, "components": { "responses": { "ClientError": { "description": "Client Error", "content": { "application/vnd.api+json": { "schema": { "type": "object", "properties": { "errors": { "type": "array", "items": { "type": "object", "required": [ "id", "code", "title", "detail" ], "properties": { "id": { "type": "string" }, "code": { "type": "string" }, "title": { "type": "string" }, "detail": { "type": "string" }, "source": { "type": "object", "properties": { "pointer": { "type": "string" }, "parameter": { "type": "string" } } } } } } }, "required": [ "errors" ] } } } }, "ServerError": { "description": "Server Error", "content": { "application/vnd.api+json": { "schema": { "type": "object", "properties": { "errors": { "type": "array", "items": { "type": "object", "required": [ "id", "code", "title", "detail" ], "properties": { "id": { "type": "string" }, "code": { "type": "string" }, "title": { "type": "string" }, "detail": { "type": "string" }, "source": { "type": "object", "properties": { "pointer": { "type": "string" }, "parameter": { "type": "string" } } } } } } }, "required": [ "errors" ] } } } } }, "schemas": { "ConversationEnum": { "type": "string", "enum": [ "conversation" ] }, "ConversationMessageCreateQuery": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ConversationMessageCreateQueryResourceObject" } }, "required": [ "data" ] }, "ConversationMessageCreateQueryResourceObject": { "type": "object", "properties": { "type": { "$ref": "#/components/schemas/ConversationMessageEnum" }, "attributes": { "type": "object", "properties": { "body": { "type": "string" }, "message_hierarchy": { "description": "An ordered RCS and SMS pair to send instead of a plain SMS: the RCS content first, then the SMS fallback delivered when RCS cannot be sent.", "type": "array", "items": { "oneOf": [ { "$ref": "#/components/schemas/MessageHierarchyRcsItem" }, { "$ref": "#/components/schemas/MessageHierarchySmsItem" } ] }, "nullable": true } }, "required": [ "body" ] }, "relationships": { "type": "object", "properties": { "conversation": { "type": "object", "properties": { "data": { "type": "object", "properties": { "type": { "$ref": "#/components/schemas/ConversationEnum" }, "id": { "description": "Related Conversation", "type": "string" } }, "required": [ "type", "id" ] } } } }, "required": [ "conversation" ] } }, "required": [ "type", "attributes", "relationships" ] }, "ConversationMessageEnum": { "type": "string", "enum": [ "conversation-message" ] }, "DynamicSMSImage": { "type": "object", "properties": { "dynamic": { "type": "boolean", "example": true, "default": true, "enum": [ true ] }, "dynamic_image_template": { "description": "Dynamic image template URL (e.g., {{product.image_url}}).", "type": "string" } }, "required": [ "dynamic_image_template" ] }, "ImageAsset": { "type": "object", "properties": { "id": { "description": "The unique identifier for this image asset. Not allowed on update.", "type": "integer" }, "file_path": { "description": "The file path of the image in Klaviyo's storage.", "type": "string", "example": "images/aa1ee5c1-039e-4d20-9e98-345755214556.jpeg" }, "name": { "description": "The human-readable name of the image.", "type": "string", "example": "product-image" }, "format": { "description": "The image file format.", "type": "string", "enum": [ "gif", "jpeg", "jpg", "png", "webp" ] }, "file_size": { "description": "The size of the image file in bytes.", "type": "integer" }, "updated": { "description": "Timestamp when the image was last updated.", "type": "string", "format": "date-time", "example": "2022-11-08T00:00:00+00:00" }, "origin": { "description": "The origin/source of the image (e.g., UI, API, AI, etc.).", "type": "string", "enum": [ "ADOPTION_SMS_FORM_FROM_EMAIL_FORM", "ADOPTION_SMS_MULTI_STEP_FORM_FROM_EMAIL_FORM", "AI", "API", "APPLICATION", "CLONED", "COMPOSER", "COMPOSER_AI_EDITED", "COMPOSER_AI_GENERATED", "COMPOSER_USED_IN_KLAVIYO_OBJECT", "COMPOSER_USER_UPLOADED", "COMPOSER_WEB_SCRAPED", "INTEGRATION", "KLAVIYO", "LIBRARY", "MARKETING_AGENT", "SOCIAL_INSTAGRAM", "SOCIAL_INSTAGRAM_OVERLAID", "UI", "WEB_SCRAPE" ], "nullable": true }, "url": { "description": "The full URL to access the image.", "type": "string", "example": "https://d3k81ch9hvuctc.cloudfront.net/company/RyGRiN/images/aa1ee5c1-039e-4d20-9e98-345755214556.jpeg" }, "image_type": { "description": "The type of image (static or dynamic).", "type": "string", "enum": [ "dynamic", "static" ] }, "l10n_key": { "description": "Localization key for this image asset, if applicable.", "type": "string", "example": "sms::01KAPBZTQBAJFD5RG9NYXBWHMR::mms_static_image_asset_id", "nullable": true } }, "required": [ "id", "file_path", "name", "format", "file_size", "updated", "url", "image_type" ] }, "MediaAsset": { "type": "object", "properties": { "id": { "description": "The unique identifier for this media asset. Not allowed on update.", "type": "string" }, "company_id": { "description": "The company ID that owns this media.", "type": "string", "example": "RyGRiN" }, "url": { "description": "The full URL to access the media.", "type": "string", "example": "https://d3k81ch9hvuctc.cloudfront.net/company/RyGRiN/videos/01KG5BPQBSY8F12ZWTGYHPPRXC.mp4" }, "media_type": { "description": "The media type (e.g., 'video' for video assets).", "type": "string", "example": "video", "default": "video" }, "name": { "description": "The human-readable name of the media.", "type": "string", "example": "demo video.1" }, "file_size": { "description": "The size of the media file in bytes.", "type": "integer" }, "thumbnail_url": { "description": "Optional thumbnail URL for video previews in RCS cards.", "type": "string", "nullable": true }, "l10n_key": { "description": "Localization key for this media asset, if applicable.", "type": "string", "nullable": true } }, "required": [ "id", "company_id", "url", "name", "file_size" ] }, "MediaAssetReference": { "type": "object", "properties": { "static_asset_id": { "description": "Reference to a static media asset.", "type": "string", "nullable": true }, "dynamic_template": { "description": "Dynamic template (e.g. Django tags) resolving to the media URL.", "type": "string", "nullable": true }, "thumbnail": { "description": "Optional thumbnail image reference for video media.", "$ref": "#/components/schemas/SlimImageReference", "nullable": true } } }, "MessageHierarchyRcsItem": { "type": "object", "properties": { "message": { "description": "The plain text message content. Often empty for RCS when rich_content is used.", "type": "string", "default": "" }, "message_format": { "description": "The format of this message (always 'RCS' for RCS entries).", "type": "string", "example": "RCS", "default": "RCS", "enum": [ "RCS" ] }, "rich_content": { "description": "Rich content for RCS messages (cards, suggestions, etc.).", "$ref": "#/components/schemas/RCSRichContent", "nullable": true }, "extra": { "description": "Additional metadata for RCS messages. Legacy placement. This is typically used in rich_content.cards.extra.", "type": "object", "nullable": true }, "image": { "description": "Legacy top-level image reference on the RCS hierarchy row (MySQL-backed). Prefer rich_content for RCS media going forward.", "$ref": "#/components/schemas/SlimImageReference", "nullable": true } } }, "MessageHierarchySmsItem": { "type": "object", "properties": { "message": { "description": "The plain text SMS message content.", "type": "string", "example": "Check out our latest deals: https://example.com" }, "message_format": { "description": "The format of this message (always 'SMS' for SMS entries).", "type": "string", "example": "SMS", "default": "SMS", "enum": [ "SMS" ] }, "extra": { "description": "Additional metadata for SMS messages (e.g., should_use_same_content flag).", "type": "object", "nullable": true }, "image": { "description": "Image reference for MMS messages. Mutually exclusive with media.", "nullable": true, "oneOf": [ { "$ref": "#/components/schemas/StaticSMSImage" }, { "$ref": "#/components/schemas/DynamicSMSImage" } ] }, "media": { "description": "Video media for MMS messages as either a hydrated MediaAsset or a reference-style payload. Mutually exclusive with image.", "nullable": true, "oneOf": [ { "$ref": "#/components/schemas/MediaAsset" }, { "$ref": "#/components/schemas/MediaAssetReference" } ] } }, "required": [ "message" ] }, "RCSCard": { "type": "object", "properties": { "id": { "description": "Unique identifier for this card.", "type": "string", "example": "44214e8f-a2fb-43b1-a8e1-1170715ffcfa" }, "title": { "description": "Optional title for the card. 200 characters is the rendered-length budget; the stored value may be longer because it is template-evaluated before it reaches the carrier.", "type": "string", "example": "Special Offer", "nullable": true }, "text": { "description": "The text content/description of the card. 2000 characters is the rendered-length budget; the stored value may be longer because it is template-evaluated before it reaches the carrier.", "type": "string", "example": "Check out our new collection!", "nullable": true }, "extra": { "description": "Additional card-specific metadata (e.g., product info). Optional.", "type": "object", "nullable": true }, "image": { "description": "Optional image for this card.", "nullable": true, "oneOf": [ { "$ref": "#/components/schemas/ImageAsset" }, { "$ref": "#/components/schemas/SlimImageReference" } ] }, "video": { "description": "Optional video for this card. May be a hydrated MediaAsset or a reference-style payload (e.g. static_asset_id), matching MMS ``MessageHierarchySmsItem.media`` behavior.", "nullable": true, "oneOf": [ { "$ref": "#/components/schemas/MediaAsset" }, { "$ref": "#/components/schemas/MediaAssetReference" } ] }, "buttons": { "description": "Optional action buttons for this card. At most 4.", "type": "array", "items": { "$ref": "#/components/schemas/RCSSuggestion" }, "nullable": true } }, "required": [ "id" ] }, "RCSRichContent": { "type": "object", "properties": { "cards": { "description": "List of cards in this rich content. At most 10.", "type": "array", "items": { "$ref": "#/components/schemas/RCSCard" }, "nullable": true }, "suggestions": { "description": "List of suggestion buttons for user interaction. At most 11.", "type": "array", "items": { "$ref": "#/components/schemas/RCSSuggestion" }, "nullable": true }, "file": { "description": "Standalone media file for RCS messages without cards.", "$ref": "#/components/schemas/MediaAssetReference", "nullable": true } } }, "RCSSuggestion": { "type": "object", "properties": { "id": { "description": "Unique identifier for this suggestion/button.", "type": "string", "example": "quick-action-1767105662671" }, "text": { "description": "The display text for the suggestion button. 25 characters is the rendered-length budget; the stored value may be longer because it is template-evaluated before it reaches the carrier.", "type": "string", "example": "Shop Now" }, "type": { "description": "The type of action this suggestion performs.", "type": "string", "enum": [ "OPEN_URL", "REPLY" ] }, "url": { "description": "The URL to open (required for OPEN_URL type).", "type": "string", "example": "https://www.example.com/shop", "nullable": true }, "open_mode": { "description": "How the URL opens on the device for OPEN_URL suggestions (browser vs webview size). Emitted to Infobip as openIn. Absent means browser.", "type": "string", "example": "WEBVIEW_FULL", "enum": [ "BROWSER", "WEBVIEW_FULL", "WEBVIEW_HALF", "WEBVIEW_TALL" ], "nullable": true } }, "required": [ "id", "text", "type" ] }, "SlimImageReference": { "type": "object", "properties": { "static_image_asset_id": { "description": "ID of the static image asset when the card uses a library image.", "type": "integer", "nullable": true }, "dynamic_image_template": { "description": "Dynamic image template (e.g. Django tags) for the card image.", "type": "string", "nullable": true }, "rendered_asset_url": { "description": "Pre-rendered image URL when available.", "type": "string", "nullable": true } } }, "StaticSMSImage": { "type": "object", "properties": { "dynamic": { "type": "boolean", "default": false, "enum": [ false ], "nullable": true }, "static_image_asset_id": { "description": "The ID of the static image asset to include.", "type": "integer" } }, "required": [ "static_image_asset_id" ] } }, "securitySchemes": { "Klaviyo-API-Key": { "type": "apiKey", "in": "header", "name": "Authorization", "description": "Private key authentication for /api/ endpoints is performed by setting the `Authorization` header to `Klaviyo-API-Key your-private-api-key`
For more information please visit https://developers.klaviyo.com/en/v2026-07-15/reference/api-overview#authentication", "x-default": "Klaviyo-API-Key your-private-api-key" } } }, "tags": [ { "name": "Conversations", "description": "conversations" } ] }