API Docs

BlogController API

Automate post creation, editing, and deletion on Mikihands via the API. Every request is securely validated before changes are applied to your blog.
Even if you're not a developer, you can automate publishing with OpenAI’s MyGPT.

Create Patch Delete Image Upload
Important Notice
  • API access is available to paid users only.
  • • The body must be written in Markdown.
  • Only the author can edit or delete posts. Use your own API key—you're responsible for keeping it secure.
  • Abusive or malicious use (excessive requests, bypass attempts, etc.) may lead to account restrictions without notice to protect the service. In such cases, no refunds are provided for the remaining period.

Base URL

https://api.mikihands.com

Authentication

This API uses API key authentication. The key is tied to your account, so the server can identify you and verify permissions.
API access is available to paid subscribers. You can generate an API key in your blog settings.

API Key Header
Authorization: Api-Key <your_api_key>
or
X-API-KEY: <your_api_key>
The server accepts both Authorization: Api-Key ... and X-API-KEY.
API Key Display Policy
  • • Your API key is shown only once in the settings screen.
  • • If you lose it, rotate the key to generate a new one—the old key will be revoked.
  • • Only the author can perform POST/PATCH/DELETE. Use your own API key.

Endpoints

POST /api/blogcontroller/posts/
Create a post.
PATCH /api/blogcontroller/posts/{slug}/
Update a published post (body, title, meta description, etc.).
DELETE /api/blogcontroller/posts/{slug}/
Delete a post. Deleted posts cannot be recovered.
POST /api/blogcontroller/image-upload/
Upload an image. Returns image_url and image_id on success.

Images: Upload Workflow

TTL 30 minutes · Max 8 · WebP

For security reasons, the Mikihands API server does not fetch external URLs provided by users. To include images in a post, upload them via the Image Upload API first, then use the returned image_url and image_id.

Core Rules
  • • On success, you’ll receive image_url (insert into the body) and image_id (include in the request payload).
  • image_id expires after 30 minutes. Expired IDs can’t be used in posts.
  • • Up to 8 images, 5MB max per file, 2048×2048 max resolution.
  • • Supported formats: PNG/JPEG/JPG/WebP. Uploaded images are converted to WebP and stored on the server.
  • • Image uploads are rate-limited to 10 requests per minute.
Step 1) Upload image
POST /api/blogcontroller/image-upload/

Upload the image as multipart/form-data. Use file as the field name.

curl -sS -X POST \
  "https://api.mikihands.com/api/blogcontroller/image-upload/" \
  -H "X-API-KEY: <your_api_key>" \
  -F "file=@/path/to/image.webp"
On success, the API returns:
{
  "success": true,
  "image_url": "/media/<username>/blog_img/<image_id>.webp",
  "image_id": "<image_id>"
}
Step 2) Use in Create / Patch
POST/PATCH /api/blogcontroller/posts/...

In body, embed image_url using Markdown image syntax. In the request payload, include the image_id values in the image_ids array.

Example body (Markdown)
![cover](/media/<username>/blog_img/<image_id>.webp)

Continue writing here...
Fields to include in the Create/PATCH payload
{
  "image_ids": ["<image_id>", "<image_id2>"]
}
Caution
  • • When updating images via PATCH, you usually need to send the body as well.
  • • Expired image_id values will cause an error. Submit your post within 30 minutes of uploading.

Payload Examples

Create (New post)
POST /api/blogcontroller/posts/
{
"title": "My first post",
"slug": "my-first-post",
"status": "PB",
"categories": "Technology, AI",
"tags": "mikihands, automation",
"meta_description": "A concise meta description...",
"body": "# Hello\\nThis is markdown."
}
Create guidelines
  • • Send the post content in body as a Markdown string.
  • • Any uppercase letters in tags are converted to lowercase on the server.
  • • Upload images via the image-upload API, then use the returned image_url and image_id.
Create Payload Fields
* Required
Field Type Required Notes
title string Required Post Title
slug string Required SEO-friendly slug (must be unique)
status string Required DF(Draft) / PB(Published)
categories string Required Comma-separated categories
tags string Optional Comma-separated tags
meta_description string Required SEO description (300-character limit)
body string Required Markdown content
image_ids string[] Optional Image IDs returned after upload (e.g. ["0e809...", "0e884..."])
Patch (partial update)
PATCH /api/blogcontroller/{slug}/

{
  "lang_code": "ja",
  "primary_language": "en",
  "translation_languages": ["ja","fr","de","ko"],
  "title": "Updated title",
  "status": "PB",
  "categories": "Tech, AI",
  "tags": "django, automation",
  "meta_description": "Updated meta...",
  "body": "# Updated\nNew markdown content",
  "image_ids": ["0e809...", "0e884..."]
}
PATCH Payload Fields
* Required
Field Type Required Notes
lang_code string Required Target language code (e.g., en, ja)
primary_language string Required User’s primary language (for lang_code validation)
translation_languages string[] Required User translation languages (for lang_code validation)
title string Optional Post Title
status string Optional DF(Draft) / PB(Published)
categories string Optional Comma-separated (e.g., "Tech","AI")
tags string Optional Comma-separated (e.g., "python","automation")
meta_description string Optional SEO description (recommended 120–160 characters)
body string Optional Markdown string. Converted to HTML on the server.
image_ids string[] Optional Image IDs returned after upload (e.g. ["0e809...", "0e884..."])
PATCH requirements
  • lang_code must be included in either primary_language or translation_languages.
  • • When updating images via image_ids, you must also include the body.
  • • The response may be 202 Accepted. Processing may take a short time.
Delete
DELETE /api/blogcontroller/posts/{slug}/
DELETE requirements
  • • Only the author can delete a post. (Based on the user linked to the API key)
  • • Deleted posts cannot be recovered.

Common Errors

400 ValidationError
  • • Duplicate slug
  • • Missing body in the CREATE request
  • • Missing lang_code / primary_language / translation_languages in the PATCH request
  • • Image update requested, but body is missing
  • — Images —
  • • Missing file (multipart field name: file)
  • • Unsupported image format (PNG/JPEG/WebP only)
  • • File size exceeds the 5MB limit
  • • Image resolution exceeds the 2048×2048 limit
  • • Too many image_ids in the posting request (max 8)
403 Forbidden
  • • Author mismatch: you can’t edit or delete this post
  • • Not a paid subscriber
410 Gone
  • • Expired image_id (30-minute TTL)
  • • Attempted to download or publish an image using an expired image_id
429 Too Many Requests
  • • Too many image upload requests (rate limit / throttling)
Tip
After uploading an image, please complete the posting request within 30 minutes. If it expires, you’ll need to upload it again.

Processing Notes

Some Mikihands Blog features may take a few seconds (or up to tens of seconds) to complete. This is normal—AI processing can take a moment.

  • Updates may take a moment: After saving, changes might not show immediately. Refresh shortly to see the latest result.
  • Translations run one by one: If you select multiple languages, they’re generated sequentially, so it may take longer.
  • Review AI output: AI can miss context or sound unnatural. Please do a final check in Preview before publishing.
  • Images & metadata: You can edit auto-generated items anytime to better fit your content.
Tip
Even after publishing, you can still make partial edits and rollbacks. So don’t feel pressured to be perfect from the start.
You’re ready to add automation.
Go back to the landing page and jump straight to the Developers section.
Go to Developers →