Raw schema
{
"type": "object",
"properties": {
"siteName": {
"type": "string",
"description": "The site to configure."
},
"config": {
"anyOf": [
{
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"description": "Master switch. false keeps the config but the endpoint returns 404."
},
"recipients": {
"minItems": 1,
"maxItems": 5,
"type": "array",
"items": {
"type": "string"
},
"description": "Server-side fixed lead recipients (1-5)."
},
"subject": {
"type": "string",
"maxLength": 200
},
"requiredFields": {
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"maxLength": 100
}
},
"honeypotField": {
"description": "Hidden field that must stay empty. Default \"_gotcha\".",
"type": "string",
"maxLength": 100
},
"confirmation": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"emailField": {
"description": "Form field with the visitor email. Default \"email\".",
"type": "string",
"maxLength": 100
},
"subject": {
"type": "string",
"maxLength": 200
},
"message": {
"type": "string",
"maxLength": 2000
}
},
"required": [
"enabled"
],
"description": "Optional confirmation email to the visitor."
},
"allowedOrigins": {
"description": "Extra origins allowed to POST. The site's own domains are always allowed.",
"maxItems": 10,
"type": "array",
"items": {
"type": "string"
}
},
"sender": {
"type": "object",
"properties": {
"name": {
"description": "Display name, e.g. \"Serso Service Portal\".",
"type": "string",
"maxLength": 100
},
"email": {
"type": "string",
"description": "From address, e.g. support@serso.be. Only honored once its domain is verified (verify_forms_sender_domain) OR an smtpRelay is set; otherwise mail falls back to the platform address."
}
},
"required": [
"email"
],
"description": "Custom From sender."
},
"replyTo": {
"description": "Reply-To: \"visitor\" (default), \"none\", a fixed email, or { field: \"<formField>\" }.",
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"field": {
"type": "string",
"maxLength": 100
}
},
"required": [
"field"
]
}
]
},
"smtpRelay": {
"type": "object",
"properties": {
"host": {
"type": "string",
"description": "SMTP server hostname or IP (must be public)."
},
"port": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "SMTP port, e.g. 25, 26, 465, 587."
},
"security": {
"type": "string",
"enum": [
"none",
"starttls",
"tls"
],
"description": "\"none\" = plaintext, \"starttls\" = upgrade, \"tls\" = implicit TLS."
},
"username": {
"description": "Omit for a no-auth trusted-host relay.",
"type": "string"
},
"password": {
"description": "Set to store/replace (encrypted at rest). Omit to keep the existing one. null to clear. Never returned on read.",
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"allowInvalidCert": {
"description": "Accept a self-signed/mismatched cert (starttls|tls). Default false.",
"type": "boolean"
}
},
"required": [
"host",
"port",
"security"
],
"description": "Deliver via your own SMTP server instead of the platform. Your server then owns SPF/DKIM. Recipients stay server-side β this is not an open relay."
},
"template": {
"type": "object",
"properties": {
"subjectTemplate": {
"description": "Subject with {fieldName} placeholders. Overrides `subject`.",
"type": "string",
"maxLength": 200
},
"fieldLabels": {
"description": "Map raw field name -> human label.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"fieldOrder": {
"description": "Display order; unlisted fields follow in submit order.",
"type": "array",
"items": {
"type": "string"
}
},
"logoUrl": {
"description": "https logo URL shown in the email header.",
"type": "string"
},
"accentColor": {
"description": "#RRGGBB accent color.",
"type": "string"
},
"headerText": {
"type": "string",
"maxLength": 2000
},
"footerText": {
"type": "string",
"maxLength": 2000
},
"bodyHtml": {
"description": "Full custom HTML body with {fieldName} placeholders (values HTML-escaped). Overrides the generated table.",
"type": "string",
"maxLength": 20000
}
},
"description": "Email branding / layout."
}
},
"required": [
"enabled",
"recipients"
]
},
{
"type": "null"
}
],
"description": "Full config to store (replaces existing). Pass null to disable and clear."
}
},
"required": [
"siteName",
"config"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}