Developer Docs

Build with
BlogFlo.

Three integration paths. Pick the one that fits your stack — a Next.js SDK for full-code control, one-click static HTML exports for any site, or a native WordPress sync for content teams already on WP.

Static HTML

Static HTML export

The simplest integration: BlogFlo generates a self-contained .html file for every post you publish. Download it and drop it anywhere — Nginx, Apache, S3, GitHub Pages, Netlify, Vercel — no server required.

Create a site

In your dashboard, click Add siteand give it a name. When writing each post you can set a canonical URL in the SEO fields — that URL is embedded verbatim in the exported file's <link rel="canonical"> and Open Graph tags.

Configure export formats

Go to Site → Settings → Export and choose which formats appear in the post editor. Static HTML is always available; you can also enable Markdown, PDF, and Google Docs exports from the same screen.

Write and publish a post

Use the BlogFlo editor to write your post. Add a featured image, fill in the SEO fields (title, description, canonical), then click Publish.

Download and deploy

Click Export → Static HTML in the post toolbar. A fully rendered <slug>.html file downloads immediately. Upload it to your host at the same path as the canonical URL you configured.

If your canonical URL is https://blog.example.com/posts/my-post, upload the file to posts/my-post.html or configure your server to serve it at that path.

What's inside the exported file

Every exported HTML file is a single, dependency-free document. You can open it in a browser without any server.

IncludedDetails
<title> + meta tagsSEO title, meta description, robots, canonical URL
Open Graphog:title, og:description, og:image, og:url, og:type
Twitter cardtwitter:card, twitter:title, twitter:description, twitter:image
Schema.org JSON-LDBlogPosting structured data with author, date, headline, image, and publisher
Post contentFull body HTML rendered with your active theme styles inline
Featured imageEmbedded as an <img> with lazy loading and explicit dimensions
Author + dateRendered in the post header; also present as <time> for accessibility

Deployment tips

Nginx — serve without the .html extension

Add a try_files rule so /posts/my-post resolves to my-post.html.

nginx
location /posts/ {
  try_files $uri $uri.html $uri/ =404;
}

Netlify / Vercel — pretty URLs

Both platforms automatically strip .html extensions when you deploy static files — no config needed. Upload your files via the CLI or drag-and-drop.

bash
# Netlify CLI
netlify deploy --dir ./posts --prod

# Vercel CLI
vercel deploy ./posts --prod

GitHub Pages — Jekyll pass-through

Add an empty .nojekyll file at the repo root so GitHub Pages serves your .html files as-is without running the Jekyll build pipeline.

bash
touch .nojekyll
git add .nojekyll && git commit -m "disable jekyll"
git push

Read post data via the REST API

The public REST API returns the raw post content and metadata. Note that the API response contains contentHtml (the article body only) — not the full self-contained HTML file that the Export button generates. Use the API to build your own rendering pipeline, or use the Next.js SDK tab to see how to embed posts directly in a Next.js app.

bash
# Fetch all published posts for a site
curl "https://app.blogflo.io/api/public/sites/SITE_ID/blog/posts?limit=100" \
  -H "Authorization: Bearer API_KEY"

# Fetch a single post by slug
curl "https://app.blogflo.io/api/public/sites/SITE_ID/blog/posts/my-post-slug" \
  -H "Authorization: Bearer API_KEY"
See the for the full endpoint reference including response shapes and error codes.