# Felo 建立簡報

POST /api/v1/data/ppts

非同步生成簡報，然後匯出為 PPTX 檔案。請將生成與匯出步驟分開：已建立的任務還不是完成的檔案。

所有範例都使用來自[總覽](https://openapi.felo.ai/zh-TW/docs/data-api/guides/felo-overview.md)的 `FELO_API_KEY`。呼叫會使用 **平台餘額**，不是 Felo Pro 點數。回應範例僅供說明；實際內容與可選欄位會有所不同。





## 1. 建立簡報

`POST /api/v1/data/ppts`

| 欄位 | 類型 | 必填 | 意義 |
|---|---|---|---|
| `query` | string | 是 | 生成指示，1–25,000 個字元 |
| `stream_protocol` | string | 否 | 預設 `message_center_v1`；通常請保持不變 |
| `ppt_config` | object | 否 | 選用設定；目前實作讀取 `ai_theme_id` |
| `livedoc_short_id` | string | 否 | 既有內容 ID，最多 100 個字元；必須通過原生 API 的擁有權與過期檢查 |
| `resource_ids` | string array | 否 | 最多 100 個 UUID 資源 ID；同樣受內容存取檢查約束 |

首次整合時，請省略內容與設定欄位。透過 `/v2` 建立的內容，不會自動可在此處重複使用。

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/ppts" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"Create a 5-slide introduction to retrieval augmented generation for software developers."}'
```

HTTP 200 會在根層回傳識別碼：

```json
{
  "task_id":"example-task-id",
  "ppt_business_id":"example-ppt-id",
  "livedoc_short_id":"example-livedoc-id",
  "expires_at":"2026-11-13T00:00:00Z"
}
```

也可能會出現 `resource_id`、`stream_key` 與 `thread_short_id` 等其他識別碼。成功的建立回應只代表任務已被接受，並不代表生成已完成。要求的投影片數只是指示；計費會依實際生成頁數計算。

```bash
TASK_ID="example-task-id"
PPT_ID="example-ppt-id"
```

### 透過 SSE 讀取生成事件

如果建立時回傳 `stream_key`，請立即使用屬於同一帳戶的 API 金鑰連線。如果沒有回傳 stream key，請使用下方的狀態與結果查詢。

```bash
curl -N 'https://openapi.felo.ai/api/v1/data/conversations/stream/YOUR_STREAM_KEY?format=structured' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: text/event-stream'
```

| 查詢參數 | 意義 |
|---|---|
| `format` | `raw`（預設）會保留 `content` 字串；`structured` 會將有效 JSON 解碼為物件或陣列 |
| `offset` | 可選的上游續傳位置，用於重新連線；不要從本地事件數量推斷它 |

請讀取每個完整的 SSE 事件、解碼其外層 JSON，然後處理 `content`。`answer` 應用程式事件會在 `data.text` 中攜帶文字；`finished` 代表串流中的生成完成。也要處理上游的 `done`、`[DONE]` 與 `error` 訊號。如果連線關閉時沒有完成訊號，請查詢任務狀態。

請使用 [SuperAgent SSE](https://openapi.felo.ai/zh-TW/docs/api-reference/superagent.md#2-消費-sse-串流) 中的解析規則與用戶端範例，並搭配本節的 `/api/v1/data/conversations/stream/{stream_key}` URL。串流結束後請讀取任務結果；PPTX 匯出仍是獨立步驟。此端點不會在 `/api/v1/data/chat` 上啟用 `stream: true`。



## 生命週期、擁有權與計費

- 簡報會在 **建立後七天** 過期。查詢與匯出不會延長這段期間。簡報的 `expires_at` 與簽名下載 URL 的 `expires_at` 代表不同的有效期間。
- 只有建立該任務的 API 帳戶可以存取其任務與簡報。缺少或無法存取的資源可能回傳 404；已過期或已刪除的資源可能回傳 410，或在清理後回傳 404。
- 生成會依每個生成頁面計費（`ppt.generate`）。在頁面計價下，建立時會預留 10 頁的費用，然後結算實際成功輸出並釋放未使用的預留金額。即使提示詞要求的頁數較少，你的帳戶也需要有足夠的可用餘額來完成這項預留。
- 匯出有獨立的請求價格（`ppt.export`）。狀態查詢、結果查詢、匯出狀態查詢與刪除都不會產生新費用。
- 發生逾時後，請查詢已儲存的任務，而不是再建立另一份簡報。請參閱[計費與錯誤](https://openapi.felo.ai/zh-TW/docs/data-api/guides/felo-billing.md)。
