SoftSolzSoftSolz
HomeAPI GuideAPI ReferenceWidget Tester

Blogs

Publish posts and embed your blog on any site.

Write and publish posts in the dashboard, then embed the reading experience anywhere with one script tag. The embedded blog lists your published posts as cards and opens each one in place - with its table of contents, share buttons, comments, subscribe box and related posts. You control all of that from the SoftSolz dashboard; the website reflects your changes automatically, no redeploy needed.

Embed your blog in 3 steps

  1. Create a brand-new, blank page on your site at any path you like, for example /blog. It must be empty - your posts render into it.
  2. Add a container where the blog should appear:
    Step 2 - container div
    <div id="softsolz-blog"></div>
  3. Add the loader script directly under that div, then publish the page:
    Step 3 - script tag
    <script src="https://app.softsolz.uk/softsolz.js"
    data-public-key="pk_live_your_key"
    data-service-id="blogs"
    data-mount="#softsolz-blog"></script>

Use a brand-new, blank page

Do not reuse a page that already has content. Your blog needs its own empty page to render correctly. Grab the public key and manage per-post options under Blogs -> Developer in the dashboard.

On a dark-background site, add data-theme="dark" to the script so the blog text stays readable.

Reader analytics

Reader analytics is on by default, with nothing to add to the snippet. The embedded blog reports reads, read time, scroll, the referring site, the campaign tag on the incoming link and the reader's country. Results appear under Blogs -> Analyticsfor any date range. This level stores nothing on the reader's device and does not follow anyone between visits, so it needs no cookie banner. Views are counted either way.

To stop reporting from one website, add data-analytics="off" to the script tag there. To stop it for the whole blog, turn off Count views and campaigns under Blogs -> Settings -> Privacy.

Opt one website out
<script src="https://app.softsolz.uk/softsolz.js"
data-public-key="pk_live_your_key"
data-service-id="blogs"
data-mount="#softsolz-blog"
data-analytics="off"></script>

Sites that render posts themselves

Reading a post with GET /posts/published/:slug does not count a view, so server renders, cache refreshes and link previews never inflate your numbers. Pass count_view=trueonly when one API read really is one reader. To measure real readers, send the view and the read time from the reader's browser with your public widget key; add your site's address to the key's allowed origins first.

Count a reader from the browser
const base = 'https://app.softsolz.uk/api/services/blogs/widget';
const headers = { 'Content-Type': 'application/json', 'X-Softsolz-Public-Key': 'pk_live_your_key' };
fetch(`${base}/posts/${slug}/view`, {
method: 'POST', headers, keepalive: true,
body: JSON.stringify({ referrer: document.referrer }),
});
const started = Date.now();
addEventListener('pagehide', () => {
fetch(`${base}/events`, {
method: 'POST', headers, keepalive: true,
body: JSON.stringify({ events: [{ type: 'read', slug, seconds: Math.round((Date.now() - started) / 1000), scroll: 100 }] }),
});
});

To link a reader's visits together - and see what someone read before they subscribed - call Softsolz.consent('granted') from your cookie banner once the visitor agrees. Until then the widget stays in the anonymous mode above. Call Softsolz.consent('denied') to drop back and erase the stored id.

Hook your cookie banner up
// call this when the visitor accepts analytics cookies
window.Softsolz.consent('granted')
// call this if they decline or withdraw consent
window.Softsolz.consent('denied')

This level is cookie law

Recognising returning readers stores an id on their device, so you must obtain consent before calling consent('granted') and disclose it in your privacy policy. It also has to be enabled for the workspace. Browsers sending Do Not Track or Global Privacy Control are never tracked, whatever you call. Only the host of a referrer is ever recorded, never the full URL.

Prefer to use AI?

Copy this prompt and paste it into Cursor, Claude, Copilot or ChatGPT. Swap in your own public key and it will add the blog to your site for you.

Prompt for your AI assistant
Add my SoftSolz blog to my website.
1. Create a new, EMPTY page at the path /blog (no other content on it).
2. On that page, insert this HTML where the blog should render, keeping the script directly under the div:
<div id="softsolz-blog"></div>
<script src="https://app.softsolz.uk/softsolz.js"
data-public-key="pk_live_your_key"
data-service-id="blogs"
data-mount="#softsolz-blog"></script>
Rules:
- Do not change the public key.
- If my site background is dark, add data-theme="dark" to the script tag.
- Keep the div and script together, in that order.
- Then tell me the URL of the page to open and test.

Read posts from your server

bash
curl https://app.softsolz.uk/api/v1/services/blogs/posts/published \
-H "Authorization: Bearer sk_live_your_key"

Read analytics from your server

With service.blogs.view, read the same analytics as the dashboard for any dates: GET /performance (totals, a daily series and top posts), /performance/posts (every post, with filter set to page1, growing or falling), /performance/sources and /posts/:id/performance. Pass from and to as YYYY-MM-DD, and compare as previous, year or none. Google search fields are filled only for a connected AI app acting for a member who can also see Search Intelligence.

bash
curl "https://app.softsolz.uk/api/v1/services/blogs/performance/posts?from=2026-09-01&to=2026-09-30&compare=previous" \
-H "Authorization: Bearer sk_live_your_key"

Next

Browse every endpoint in the API Reference, or read the product walkthrough on docs.softsolz.uk.