Saeroon Hosting Developer API Reference
Explore all block properties, usage, and combination rules
Full site schema examples by industry
Allowed combinations and constraints between blocks
https://api.saeroon.comEndpoints requiring authentication must include the X-API-Key header
developer.docs.apiTester
developer.docs.enterApiKey
/api/v1/hosting/blocks/catalogRetrieve the full block catalog including block types, props, and constraints.
{
"version": "1.11.0",
"blocks": [
{
"type": "heading-block",
"displayName": "Heading",
"displayNameKo": "제목",
"category": "Block",
"tier": "Free",
"props": [
{
"name": "text",
"type": "string",
"required": true,
"defaultValue": "Heading"
}
],
"allowedParentTypes": [
"container",
"main-block"
],
"allowedChildTypes": [],
"responsiveProps": [
"fontSize",
"textAlign"
]
}
],
"constraints": {
"maxBlocksPerPage": 200,
"maxPagesPerTemplate": 20,
"maxJsonSize": "5MB",
"maxDepth": 10
}
}/api/v1/hosting/blocks/catalog/{type}Retrieve detailed information and example JSON for a specific block type.
{
"block": {
"type": "heading-block",
"displayName": "Heading",
"displayNameKo": "제목",
"category": "Block",
"props": []
},
"exampleJson": {
"id": "block-1",
"type": "heading-block",
"props": {
"text": "Hello World",
"level": 2
}
},
"usageNotes": [
"Use level 1 for page title only"
]
}/api/v1/hosting/blocks/patterns/catalogRetrieve the pattern and block combination catalog.
{
"patterns": [
{
"name": "hero",
"displayName": "Hero Section",
"displayNameKo": "히어로 섹션",
"category": "Pattern",
"blockTypes": [
"container",
"heading-block",
"text-block",
"button-block"
]
}
],
"combinations": [
{
"name": "landing-page-basic",
"description": "Basic landing page structure",
"blockTypes": [
"hero",
"feature-grid",
"cta-banner",
"footer-block"
]
}
]
}After creating a preview session, you can send real-time schema updates via WebSocket.
const ws = new WebSocket(previewResponse.wsEndpoint);
ws.onopen = () => {
// Send schema updates
ws.send(JSON.stringify({
type: 'schema-update',
payload: { schemaJson: '...' }
}));
};
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
// msg.type: 'preview-ready' | 'preview-error'
};