First, you need to determine where SeaMist thinks your content root is. To do this, you can do this at the command line:
$ seamist status
SeaMist 0.3.1+09f712b
SeaMist
Content Root: /var/lib/seamist/sites
CLI Config: /home/user/.config/seamist/seamist_cmd.toml
Config Path: /etc/seamist/config.json
API Keys: /etc/seamist/api-keys.toml
API URL: http://127.0.0.1:9149
No API key is configured for CLI API calls.
Use --api-key, SEAMIST_API_KEY, `seamist set api-key`, or `seamist new apikey --set-default-for-cli`.
Here you can see the Content Root is defined as /var/lib/seamist/sites. This is where you must create your top level site folders. Each site gets its own folder, so for example:
/var/lib/seamist/sites/
site1.example.comsite2.anothersite.cometcSeaMist assumes the directories here are sites.
You can change the permissions here if you need to. The only thing that needs to stay is that the seamist user needs read access to this directory tree.
Content lives inside .smx files. At their simplest, they contain nothing but markdown. To use the more advanced features, they need a TOML header, like so:
[meta]
title = "My First Page"
[content]
# My First Page
Here is some content.
Or if you'd prefer to use HTML:
[meta]
title = "My First HTML Page"
type = "html"
[content]
<h1>My First HTML Page</h1>
If you were to save one of these files as index.smx inside /var/lib/seamist/sites/site1.example.com you would have your default content item for the site.
You could then access it on the route / by calling the URL:
http://seamist.host:9149/api/v1/content/html?site=site1.example.com&route=/
You could also point the domain site1.example.com at the server running SeaMist (ideally behind a reverse proxy to handle HTTPS), and then access using:
https://site1.example.com/api/v1/content/html?route=/
Using the content/html endpoint gets you pure HTML output for both of the above source files. The Markdown is converted to HTML before being served.
If you want access to the metadata contained in the [meta] section, you can request
https://site1.example.com/api/v1/content/json?route=/
Which would return
{
"meta": {
"title": "My First Page",
"created": "2026-06-06T14:00:00",
"modified": "2026-06-06T14:00:00"
},
"content": {
"html": "<h1>My First Page</h1>"
}
}