Base URL
Authentication
이 API는 API Key 방식을 지원합니다.
키는 사용자 계정에 연결되어 있으며, 서버에서 Key를 이용하여 사용자를 식별하고 권한을 확인합니다.
API 요청기능은 유료구독자에게 제공되며, API Key는 블로그설정 메뉴에서 발급받을 수 있습니다.
or
X-API-KEY: <your_api_key>
- • API Key는 설정 화면에서 1회만 표시됩니다.
- • 분실 시에는 “재발급(rotate)”을 통해 새 키를 발급하고, 기존 키는 폐기(revoke)합니다.
- • POST/PATCH/DELETE는 작성자(author)만 가능하므로, 본인 키로 호출해야 합니다.
Endpoints
Images: Upload Workflow
TTL 30 minutes · Max 8 · WebP보안을 위해 Mikihands API 서버는 사용자가 제공한 외부 URL을 직접 접근(다운로드)하지 않습니다. 이미지를 포함해 포스팅하려면 먼저 업로드 API로 이미지를 안전하게 등록한 뒤, 응답으로 받은 image_url / image_id를 사용하세요.
- • 업로드 성공 시 image_url(본문에 삽입)과 image_id(포스팅 payload에 포함)를 받습니다.
- • image_id는 30분 후 만료되며, 만료된 ID는 포스팅에 사용할 수 없습니다.
- • 최대 8장, 파일 크기 5MB 이하, 해상도 2048×2048 이하.
- • 지원 포맷은 PNG/JPEG/JPG/WebP 이며, 업로드된 이미지는 서버에서 WebP로 변환되어 저장됩니다.
- • 이미지 업로드는 10r/1min 쓰로틀링의 제한이 있습니다.
이미지 파일을 multipart/form-data로 업로드합니다. 필드명은 file 입니다.
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"
{
"success": true,
"image_url": "/media/<username>/blog_img/<image_id>.webp",
"image_id": "<image_id>"
}
본문(body)에는 image_url을 그대로 Markdown 이미지 문법으로 삽입하고, 요청 payload에는 image_ids 배열에 image_id들을 포함하세요.
 여기에 본문을 계속 작성...
{
"image_ids": ["<image_id>", "<image_id2>"]
}
- • 이미지를 변경하는 PATCH는 보통 body도 함께 보내야 합니다.
- • 만료된 image_id는 오류가 발생하므로, 업로드 후 30분 내에 포스팅 요청을 완료하세요.
Payload Examples
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."
}
- • 본문은 body에 Markdown 문자열로 전송합니다.
- • 태그에 포함된 대문자는 서버에서 소문자로 변환됩니다.
- • 이미지는 image-upload API로 업로드 후 반환되는 image_url + image_id를 사용하세요.
| Field | Type | Required | Notes |
|---|---|---|---|
| title | string | Required | 포스트 제목 |
| slug | string | Required | 영문 SEO용 슬러그 (중복 불가) |
| status | string | Required | DF(Draft) / PB(Published) |
| categories | string | Required | 쉼표로 구분된 카테고리 목록 |
| tags | string | Optional | 쉼표로 구분된 태그 목록 |
| meta_description | string | Required | SEO용 설명 (300자 제한) |
| body | string | Required | Markdown 본문 |
| image_ids | string[] | Optional | 이미지 업로드 후 반환받은 ID (예:["0e809...", "0e884..."]) |
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..."]
}
| Field | Type | Required | Notes |
|---|---|---|---|
| lang_code | string | Required | 수정 적용 언어 코드 (예: en, ja) |
| primary_language | string | Required | 사용자 주 언어 (lang_code 검증용) |
| translation_languages | string[] | Required | 사용자 번역 언어 목록 (lang_code 검증용) |
| title | string | Optional | 포스트 제목 |
| status | string | Optional | DF(Draft) / PB(Published) |
| categories | string | Optional | 쉼표로 구분 (예: "Tech","AI") |
| tags | string | Optional | 쉼표로 구분 (예: "python","automation") |
| meta_description | string | Optional | SEO 설명(권장 120~160자) |
| body | string | Optional | Markdown 문자열. 서버가 HTML로 변환합니다. |
| image_ids | string[] | Optional | 이미지 업로드 후 반환받은 ID (예:["0e809...", "0e884..."]) |
- • lang_code는 반드시 primary_language 또는 translation_languages 안에 포함되어야 합니다.
- • image_ids으로 이미지 변경을 요청할 때는 본문(body)을 함께 보내야 합니다.
- • 응답은 202 Accepted가 될 수 있으며, 실제 반영은 약간의 지연이 있을 수 있습니다.
DELETE /api/blogcontroller/posts/{slug}/
- • 삭제는 작성자(author)만 가능합니다. (키에 매핑된 사용자 기준)
- • 삭제된 포스트는 복구가 불가 합니다.
Common Errors
- • slug 중복
- • create에서 본문(body) 누락
- • PATCH에서 lang_code / primary_language / translation_languages 누락
- • img_name 수정인데 본문(body)이 함께 오지 않음
- — Images —
- • file 누락 (multipart 필드명 file)
- • 지원하지 않는 이미지 포맷 (PNG/JPEG/WebP만 허용)
- • 파일 크기 초과 (최대 5MB)
- • 이미지 해상도 초과 (최대 2048×2048)
- • 포스팅 요청에서 image_ids 최대 개수 초과 (최대 8개)
- • 작성자(author) 불일치로 수정/삭제 불가
- • 유료 구독자가 아님 (Not Paid Member)
- • 만료된 image_id (TTL 30분)
- • 만료된 image_id로 이미지 다운로드 또는 포스팅 시도
- • 이미지 업로드 요청이 너무 잦음 (rate limit / throttle)
Processing Notes
Mikihands Blog의 일부 기능은 처리에 시간(수 초에서 수십 초)이 걸릴 수 있습니다. 이는 AI가 실제로 연산을 수행하고 결과를 반영하는 과정이 포함되기 때문이며, 정상 동작입니다.
- • 반영 지연 가능: 저장/수정 후 화면에 결과가 바로 보이지 않을 수 있어요. 잠시 후 새로고침하면 반영됩니다.
- • 번역은 순차 처리: 여러 언어를 선택한 경우, 언어별로 생성되며 전체 완료까지 시간이 더 걸릴 수 있습니다.
- • AI 결과는 검토 권장: AI는 문맥을 오해하거나 표현이 어색할 수 있습니다. 발행 전 미리보기에서 최종 확인을 권장합니다.
- • 이미지/메타 정보: 자동 생성된 요소는 콘텐츠에 맞게 언제든 수정할 수 있습니다.