> ## Documentation Index
> Fetch the complete documentation index at: https://docs.morrowly.app/llms.txt
> Use this file to discover all available pages before exploring further.

# 모로와 대화하기

> AI 계산 도우미 모로에게 묻고, 받은 제안을 적용하거나 되돌립니다.

모로는 이 가구의 현재 재무와 플랜을 읽고, 계산 엔진으로 직접 계산해 답합니다. 플랜을 바꾸자고 할 때는 **제안**을 내고, 적용해야 저장됩니다.

<Info>
  대화·질문·제안 적용은 **맥스** 요금제가 필요합니다(없으면 402). 사용량 보기(`GET /v1/advisor`)와 알림(`advisor/alerts`)은 요금제 없이 됩니다.
</Info>

## 순서

<Steps>
  <Step title="대화 만들기">
    `GET /v1/advisor` 의 `models[].provider` 하나로 대화를 만듭니다. 대화는 플랜마다 여럿입니다.

    ```bash theme={null}
    curl -X POST https://api.morrowly.app/v1/plans/$PLAN/advisor/threads \
      -H "Authorization: Bearer $MORROWLY_TOKEN" -H "Content-Type: application/json" \
      -d '{"provider":"OPENAI"}'
    ```
  </Step>

  <Step title="질문하기">
    `question` 은 1\~2000자입니다. 답은 스트림으로 옵니다(아래).

    ```bash theme={null}
    curl -N -X POST https://api.morrowly.app/v1/plans/$PLAN/advisor/threads/$THREAD/messages \
      -H "Authorization: Bearer $MORROWLY_TOKEN" -H "Content-Type: application/json" \
      -d '{"question":"은퇴를 2년 늦추면 순자산이 얼마나 달라져?"}'
    ```
  </Step>

  <Step title="제안 적용하기">
    답의 `proposals[index]` 를 `.../messages/{messageId}/proposals/{index}/apply` 로 적용합니다. 한 번에 다 적용하려면 `apply-all`, 마지막 적용을 되돌리려면 `undo` 입니다.
  </Step>
</Steps>

## 답 스트림

질문 응답은 [Vercel AI SDK UI 메시지 스트림](https://ai-sdk.dev/docs/ai-sdk-ui/stream-protocol) v1 입니다(헤더 `x-vercel-ai-ui-message-stream: v1`). 줄마다 `data: {조각}` 이고 끝은 `data: [DONE]` 입니다.

| 조각 `type` | 뜻 |
| - | - |
| `start` · `finish` | 시작과 끝 |
| `reasoning-start/delta/end` | 생각 요약 |
| `tool-input-available` · `tool-output-available` | 엔진으로 계산한 것(도구 이름·입력·결과) |
| `text-start/delta/end` | 답 글 |
| `data-exchange` | 저장된 질문·답과 제안(`data` 가 대화 한 번) |
| `error` | 답하다 실패함(`errorText`) |

* 없는 대화(404)·빈 질문(400)·이번 달 한도(429)는 스트림이 시작되기 전에 상태 코드로 옵니다.
* 연결을 끊어도 모로는 끝까지 답해 저장합니다. 나중에 `GET .../threads/{threadId}` 로 읽습니다.
* 브라우저나 Node 에서는 AI SDK 의 `useChat`·`readUIMessageStream` 으로 읽을 수 있습니다.

## 제안

`data-exchange` 와 대화 보기의 `proposals[]` 하나는 플랜을 어떻게 바꿀지와 그 결과입니다.

* `remove`·`upsert`·`milestones`: 뺄 항목 id, 넣거나 바꿀 항목, 바꿀 이정표([플랜 본문](/plans)과 같은 모양). `finances`: 현재 재무 고치기(없으면 null).
* `before`·`after`: 바꾸기 전과 후의 `finalNetWorth`·`fiAge`·`minCash`·`firstShortfallMonth`·`retirementNetWorth`.
* 적용하면 플랜(과 재무)이 저장됩니다. 제안을 받은 뒤 플랜이나 재무가 다른 곳에서 바뀌었으면 412 입니다.

## 사용량

`GET /v1/advisor` 의 `usedUsd`·`limitUsd` 가 가구의 이번 달 사용량과 한도입니다. 한도를 다 쓰면 다음 달까지 질문이 429 입니다.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.