Skip to main content
Two minimal but realistic implementations show the full Canvas lifecycle. Both verify the X-Secret header, handle the initial render, react to button clicks, and return confirmation state.

Minimal endpoint

Tips and gotchas

Treat the header check as the first thing your handler does. Any request that fails it should receive a 401 and nothing else.
Sleekplan accepts a single object, but arrays make intent obvious and are easier to extend when you need to render multiple components.
The id is the field name in subsequent payloads — renaming it mid-flow drops state and breaks your handler’s ability to detect which button was clicked.
See Inline errors for the exact shape Sleekplan expects when you need to surface a validation message.
Need extra help? Share your endpoint URL and a sample payload with support@sleekplan.com.