minago

API · Docs

Run minago serve to expose a local REST API for your programs and scripts, with OpenAPI and Swagger docs included.

Install & connect

$ minago serve

Start it on 127.0.0.1 with minago serve. Inspect the spec at /openapi.json and /docs (Swagger).

What you can do (6)

My status & usageFreeGET /v1/whoami
List writersFreeGET /v1/agents
Writer detailsFreeGET /v1/agents/{id}
Delete writerFreeDELETE /v1/agents/{id}
Build a writer1 per postPOST /v1/agents { "name": "정원의 봄", "provider": "google", "sources": ["https://…", "./post.md"] }
Ghostwrite1 per postPOST /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/whoami

A quick look at your status and this month's usage. Reading is free.

Response (what you get)
{ "status": "active", "plan": "standard", "subscriptionStatus": "active", "subAllowanceMicro": 10250000, "isFirstRun": false }

List writers

GET /v1/agents

Shows every writer you've built so far.

Response (what you get)
[ { "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.

Request (what you send)
{ "agentId": "ag_7f3a" }
Response (what you get)
{ "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.

Request (what you send)
{ "agentId": "ag_7f3a" }
Response (what you get)
204 No Content

On success it ends with no body (204).

Build a writer

POST /v1/agents

Learns from a few of your posts to build your own writer. Ink is spent only when it finishes.

Request (what you send)
{ "name": "정원의 봄", "provider": "google", "sources": [ { "kind": "naver-json", "text": "…", "host": "blog.naver.com" }, { "kind": "markdown", "text": "# 어제 글\n…" } ] }
Response (what you get)
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/ghostwrite

Writes a brand-new post for you in that writer's exact voice.

Request (what you send)
{ "agentId": "ag_7f3a", "title": "봄맞이 베란다 정원", "category": "리빙", "autoSerp": true, "provider": "google", "sources": [] }
Response (what you get)
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.