What are Surfaces?
A Surface is a named display context that defines how product content should be adapted for a specific distribution channel or platform. Each surface has constraints — max title length, tone of voice, format hints — that guide the AI when generating content. Without surfaces, the Canvas generates “universal” content: a single version of each product’s title, description, and attributes that serves as the default across all channels. With surfaces, you can generate channel-specific versions that are optimized for each platform’s requirements and audience expectations.System Surfaces
Alana provides five pre-configured system surfaces that cover the most common distribution channels. System surfaces cannot be deleted, but you can generate overrides for any product on any of them.| Surface Key | Display Name | Max Title | Max Description | Tone |
|---|---|---|---|---|
google_shopping | Google Shopping | 150 chars | 5000 chars | SEO-optimized |
openai_commerce | OpenAI Commerce | 200 chars | 2000 chars | Conversational |
mobile_pdp | Mobile Product Page | 65 chars | 300 chars | Concise |
desktop_pdp | Desktop Product Page | 200 chars | 2000 chars | Detailed |
agent_response | AI Agent Response | 100 chars | 500 chars | Natural language |
Custom Surfaces
Workspaces can create custom surfaces for any display context they need. A custom surface has a uniquesurface_key (lowercase letters, digits, and underscores), a display name, and optional constraints.
Examples of custom surfaces:
tiktok_shop— short-form descriptions optimized for TikTok’s buying intenttrade_show_kiosk— large-display format with bold headlineswhatsapp_catalog— catalog API format for WhatsApp Businessb2b_wholesale— technical specifications in a formal tone
How Surface Resolution Works
When a channel requests product content with a surface context, Alana resolves the content through a three-tier cache:Surface Overrides
A surface override is a partial set of product fields stored per-product, per-surface in theproduct_surfaces table. Overrides are generated by:
- Canvas: Select a surface before generating content; the AI applies the surface constraints automatically
- API: PUT a partial product object to
/api/workspace/{id}/products/{pid}/surfaces/{key} - Bulk: Generate overrides for multiple products at once via the Batch API
Surfaces Across Channels
Each channel resolves surfaces differently:Canal 1 — Feed API
The platform determines the surface implicitly. There is nosurface query parameter — the feed endpoint selects the surface based on the platform:
vtex, shopify, nuvemshop) receive universal content.
Canal 2 — Search API
Pass thesurface query parameter to receive surface-adapted content:
surface returns universal content.
Canal 3 — MCP Tools
AI agents can request surface-resolved content using thesurface parameter in tool calls, or use the dedicated surface tools:
list_surfaces— enumerate available surfaces for a workspaceget_surface_product— fetch a product with a specific surface applied