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

![Alt text](https://example.com/image.png)

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" becomes getting-started-with-ai-agents
  • Custom: Provide a slug field 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