Install & connect
$ minago serveStart it on 127.0.0.1 with minago serve. Inspect the spec at /openapi.json and /docs (Swagger).
What you can do (6)
GET /v1/whoamiGET /v1/agentsGET /v1/agents/{id}DELETE /v1/agents/{id}POST /v1/agents
{ "name": "정원의 봄", "provider": "google", "sources": ["https://…", "./post.md"] }POST /v1/ghostwrite
{ "agentId": "ag_7f3a", "title": "봄맞이 베란다 정원", "autoSerp": true }▸ Request & response
Loopback only (127.0.0.1); calling /v1/* needs the per-launch run-token (Authorization: Bearer). Your machineId is never exposed.
# 포트·run-token 은 `minago serve` 실행 시 출력돼요 (기본 포트 51789)
curl http://127.0.0.1:51789/v1/whoami \
-H "Authorization: Bearer <run-token>"My status & usage
GET /v1/whoamiA quick look at your status and this month's usage. Reading is free.
{
"status": "active",
"plan": "standard",
"subscriptionStatus": "active",
"subAllowanceMicro": 10250000,
"isFirstRun": false
}List writers
GET /v1/agentsShows every writer you've built so far.
[
{
"id": "ag_7f3a",
"name": "정원의 봄",
"status": "ready",
"createdAt": 1718200000,
"score": 18,
"verdict": "pass",
"domain": "blog.naver.com"
}
]Writer details
GET /v1/agents/{id}Opens one writer in detail — voice summary, score, and more.
{ "agentId": "ag_7f3a" }{
"id": "ag_7f3a",
"name": "정원의 봄",
"status": "ready",
"createdAt": 1718200000,
"score": 18,
"verdict": "pass",
"domain": "blog.naver.com",
"voiceBrief": "따뜻하고 상세한 설명체",
"sources": ["blog.naver.com (3편)"]
}Delete writer
DELETE /v1/agents/{id}Cleanly removes a writer you no longer need.
{ "agentId": "ag_7f3a" }204 No ContentOn success it ends with no body (204).
Build a writer
POST /v1/agentsLearns from a few of your posts to build your own writer. Ink is spent only when it finishes.
{
"name": "정원의 봄",
"provider": "google",
"sources": [
{ "kind": "naver-json", "text": "…", "host": "blog.naver.com" },
{ "kind": "markdown", "text": "# 어제 글\n…" }
]
}event: stage
data: { "name": "analyze", "phase": "start" }
event: tokens
data: { "in": 1200, "out": 450, "remainingMicro": 4825000 }
event: stage
data: { "name": "finalize", "phase": "end" }
event: result
data: { "verdict": "pass", "score": 18 }Streams progress line by line (SSE) until it's done; the final result event carries the output.
Ghostwrite
POST /v1/ghostwriteWrites a brand-new post for you in that writer's exact voice.
{
"agentId": "ag_7f3a",
"title": "봄맞이 베란다 정원",
"category": "리빙",
"autoSerp": true,
"provider": "google",
"sources": []
}event: stage
data: { "name": "write", "phase": "start" }
event: tokens
data: { "in": 1500, "out": 2200, "remainingMicro": 2500000 }
event: result
data: { "verdict": "pass", "score": 19, "markdown": "# 봄맞이 베란다 정원\n…" }Streams progress line by line (SSE) until it's done; the final result event carries the output.
Notes for this surface
• Loopback only (127.0.0.1), secured with a per-launch token. • generate and ghostwrite stream progress over SSE by default (ghostwrite ends with markdown). • Don't want an SSE parser? Send Accept: application/json or ?wait=1 to get one final JSON result + a real HTTP status (200 ok · 402 low balance · 422 quality · 429 rate limit). • Retrieve finished posts with GET /v1/library (list) and GET /v1/library/{id} (body). • Write costs are shown in the OpenAPI spec.