Build with Ekamoira
Publish blog posts programmatically using our REST API or let AI assistants manage your content with MCP (Model Context Protocol) integration.
Overview
Ekamoira provides two ways to programmatically manage your blog content:
REST API
Traditional HTTP API with JSON requests. Perfect for scripts, integrations, and custom workflows.
MCP Server
Model Context Protocol for AI assistants. Let ChatGPT or Claude publish posts for you.
Agentic Publishing
With MCP, you can tell ChatGPT "Publish a blog post about our new product launch" and it will create, format, and publish the content automatically.
API Keys
API keys authenticate your requests and scope them to your company account. Each key has specific permissions (scopes) that control what it can access.
Creating an API Key
- 1
Go to Account → API Keys in your dashboard
- 2
Click Create API Key
- 3
Give it a name (e.g., "ChatGPT Integration") and select scopes
- 4
Copy the key immediately - it won't be shown again!
Available Scopes
| Scope | Description |
|---|---|
| blog:read | Read blog posts and list content |
| blog:write | Create, update, and delete blog posts |
Security Note
API keys are hashed and stored securely. We can't retrieve your key after creation. If lost, revoke the old key and create a new one.
REST API
The REST API uses standard HTTP methods with JSON payloads. Authenticate by including your API key in the request headers.
Base URL
https://app.ekamoira.com/api/v1Authentication
Include your API key in one of these headers:
# Option 1: Authorization header
Authorization: Bearer ek_live_abc123...
# Option 2: X-API-Key header
X-API-Key: ek_live_abc123...Endpoints
/blog/postsList all blog posts with optional filters.
Query Parameters:
status- Filter by status: draft, published, archivedlimit- Max results (default: 20, max: 100)
/blog/postsCreate a new blog post. Requires blog:write scope.
{
"title": "Getting Started with AI SEO",
"content": "# Introduction\n\nMarkdown content here...",
"slug": "getting-started-ai-seo",
"excerpt": "A comprehensive guide to AI-powered SEO",
"meta_title": "AI SEO Guide 2025 | Ekamoira",
"meta_description": "Learn how to optimize for AI Overviews...",
"status": "published"
}/blog/posts/[slug]Get a single blog post by its URL slug.
/blog/posts/[slug]Update an existing blog post. Only include fields you want to change.
/blog/posts/[slug]Permanently delete a blog post.
MCP Server
The Model Context Protocol (MCP) allows AI assistants to interact with external tools. Our MCP server exposes blog management capabilities that ChatGPT, Claude, and other MCP-compatible assistants can use.
MCP Endpoint
https://app.ekamoira.com/api/mcpAvailable Tools
publish_blog_postCreate and publish a new blog post with title, content, and metadata
list_blog_postsList all posts with optional status filter and pagination
get_blog_postRetrieve a single post by its URL slug
update_blog_postModify an existing post (title, content, status, etc.)
delete_blog_postPermanently remove a blog post
Stateless Design
Our MCP server is stateless - perfect for serverless environments. Each request is authenticated independently via your API key.
ChatGPT Integration
Connect Ekamoira to ChatGPT using the Developer Mode MCP connector.
Connect ChatGPT
Access your content via ChatGPT MCP
Setup Steps
- 1
Enable Developer Mode
Go to ChatGPT Settings → General → scroll to Developer mode section and enable it.
- 2
Add MCP Server
Click "Add MCP Server" and fill in the details:
Label ekamoira-blog URL https://app.ekamoira.com/api/mcp Headers Authorization: Bearer ek_live_... - 3
Start Publishing
Ask ChatGPT to "Publish a blog post about..." and it will use your connected Ekamoira account.
Example Prompts
Claude Integration
Connect to Claude Desktop or Claude Code CLI using MCP with HTTP transport.
Connect Claude
Use Ekamoira with Claude.ai or Cursor
Claude Desktop
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ekamoira-blog": {
"transport": "http",
"url": "https://app.ekamoira.com/api/mcp",
"headers": {
"Authorization": "Bearer ek_live_your_key_here"
}
}
}
}Claude Code CLI
Add the MCP server using the CLI:
claude mcp add \
--transport http \
--header "Authorization: Bearer ek_live_your_key_here" \
ekamoira-blog \
https://app.ekamoira.com/api/mcpExamples
Next.js Integration
Fetch content with our REST API
cURL: Create a Blog Post
curl -X POST https://app.ekamoira.com/api/v1/blog/posts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ek_live_abc123..." \
-d '{
"title": "My First API Post",
"content": "# Hello World\n\nThis post was created via the API!",
"status": "published"
}'JavaScript/TypeScript
const response = await fetch('https://app.ekamoira.com/api/v1/blog/posts', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ek_live_abc123...',
},
body: JSON.stringify({
title: 'My API Post',
content: '# Hello World\n\nCreated via API!',
status: 'published',
}),
});
const post = await response.json();
console.log('Created post:', post.slug);Python
import requests
response = requests.post(
'https://app.ekamoira.com/api/v1/blog/posts',
headers={
'Authorization': 'Bearer ek_live_abc123...',
},
json={
'title': 'My Python Post',
'content': '# Hello from Python\n\nCreated via API!',
'status': 'published',
}
)
post = response.json()
print(f"Created post: {post['slug']}")Ready to Get Started?
Create your API key and start publishing programmatically in minutes.