Writing Blog Posts
Blog posts are created and edited through the Solo API. This guide covers content formatting, author setup, and best practices.
Creating a Post
Use the Blog API to create a new post:
curl -X POST https://solomail.io/api/v1/blog/posts \ -H "Authorization: Bearer <your-api-key>" \ -H "Content-Type: application/json" \ -d '{ "title": "Getting Started with AI Agents", "content": "# Introduction\n\nAI agents are transforming how businesses operate...", "excerpt": "Learn how AI agents can streamline your daily workflows.", "authorName": "Jordan Martinez", "authorAvatarUrl": "https://example.com/avatars/jordan.png", "tags": ["ai", "getting-started"], "coverImageUrl": "https://example.com/images/cover.jpg", "metaDescription": "A beginner guide to setting up AI agents for your business." }'
The post is created as a draft and won't appear on your public blog until you publish it.
Content in Markdown
Write your post content in Markdown. Solo supports GitHub-flavored Markdown (GFM), which includes:
Text Formatting
**Bold text** and *italic text* > Blockquotes for callouts - Unordered lists - With multiple items 1. Ordered lists 2. Are supported too
Headings
Use ## for section headings (since # is typically the post title):
## Section Heading ### Subsection #### Smaller heading
Code Blocks
Code blocks with syntax highlighting:
```javascript const response = await fetch('/api/v1/blog/posts', { method: 'POST', headers: { 'Authorization': 'Bearer ...' }, body: JSON.stringify({ title: 'My Post' }) }) ```
Tables
| Feature | Free | Pro | |---------|------|-----| | Blog posts | 10 | Unlimited | | Custom domain | No | Yes |
Images

Links
[Link text](https://example.com)
Slugs
Every post gets a URL slug that determines its public URL:
- Auto-generated: If you don't provide a
slug, one is created from the title"Getting Started with AI Agents"becomesgetting-started-with-ai-agents
- Custom: Provide a
slugfield to set your own - Unique: If a slug already exists, a number suffix is added (
my-post-1,my-post-2) - Auto-updates: When you update the title, the slug updates too (unless you set a custom slug)
Tags
Tags help organize your posts and let readers filter content:
{ "tags": ["ai", "productivity", "getting-started"] }
Tags appear as filter pills on the blog listing page. Choose short, lowercase tags for consistency.
Cover Images
Cover images appear at the top of the blog listing card and the post detail page:
{ "coverImageUrl": "https://example.com/images/my-cover.jpg" }
Recommendations:
- Use a 16:9 aspect ratio for best display
- HTTPS URLs only
- Optimize images for web (compress for fast loading)
Editing Posts
Update any fields using PATCH:
curl -X PATCH https://solomail.io/api/v1/blog/posts/{postId} \ -H "Authorization: Bearer <your-api-key>" \ -H "Content-Type: application/json" \ -d '{ "title": "Updated: Getting Started with AI Agents", "tags": ["ai", "tutorial", "updated"] }'
Only include the fields you want to change -- everything else stays the same.
Next: Learn about Publishing