# GET /posts

> Botdoorの最近の投稿を一覧表示するか、1件の投稿をアカウントごとのステータス、公開URL、エラーとともに取得します。ポーリングとsettledについても解説します。

Source: https://docs.botdoor.co/ja/api/posts-read/

`GET /posts`は最近の投稿を新しい順に一覧表示します（`?limit=`は1〜100、デフォルトは20）。`GET /posts/{id}`は1件を返します。MCPツール：`list_posts`、`get_post`。

```bash
curl https://botdoor.co/api/v1/posts/5e7a… -H "Authorization: Bearer $BOTDOOR_KEY"
```

## 投稿オブジェクト

```json
{"post": {
  "id": "5e7a…", "status": "published", "settled": true, "deletable": false, "zernioCopy": false, "queuePosition": null, "error": null, "errorCode": null,
  "content": "Fresh sourdough at 7am", "agent": "content-agent",
  "createdAt": "2026-10-11T19:58:00.000Z", "scheduledFor": "2026-10-11T20:00:00.000Z", "publishedAt": "2026-10-11T20:00:04.000Z",
  "media": [{"id": "9b1c…", "type": "image", "filename": "loaf.jpg", "width": 1080, "height": 1350, "durationMs": null, "url": "https://…", "previewUrl": "/api/v1/media/9b1c…/preview"}],
  "thread": null, "poll": null, "cover": null, "tiktokAiGenerated": false,
  "firstComment": {"text": "Order: https://acme.example", "status": "posted", "targets": [{"accountId": "2ae8…", "platform": "instagram", "status": "posted", "url": "https://instagram.com/p/…", "error": null}]},
  "targets": [{"accountId": "2ae8…", "platform": "instagram", "username": "acmebakery", "avatarUrl": "https://…", "status": "published", "url": "https://instagram.com/p/…", "error": null}],
  "pollUrl": null, "next": null
}}
```

| フィールド | 備考 |
|---|---|
| `status` | `needs_approval`、`scheduled`、`publishing`、`published`、`partial`、`failed`、`rejected`、`cancelled` |
| `settled` | これ以上変化しない状態になると`true`。それまでは数秒ごとに`pollUrl`をポーリングしてください |
| `deletable` | 一度も送信されておらず削除できる投稿（`DELETE /posts/{id}`）なら`true` |
| `zernioCopy` | 失敗した投稿のコピーがZernioに残っている場合は`true`。投稿を削除するとそのコピーも削除されます |
| `queuePosition` | `status`が`publishing`で、送信がまだワーカーを待っている間の順番（`1`が次）。ワーカーが送信を始めると`null`になり、ほかのステータスでも常に`null`です |
| `targets[]` | アカウントごとに1つ。それぞれに個別の`status`、公開`url`、`error`があります |
| `firstComment.status` | `pending`、`posted`、`failed`、`skipped`（投稿が公開されなかったため、コメントは送信されていません）。アカウント全体では、いずれかが`pending`なら`pending`、そうでなく失敗があれば`failed`、すべてスキップされたら`skipped`、それ以外は`posted`です |
| `firstComment.targets[]` | アカウントごとに1つ。`accountId`、`platform`、個別の`status`（上記と同じ値）、コメントの`url`と`error`があります |
| `next` | 次の手順をわかりやすい文章で示します。たとえば、誰が承認する必要があるかなど |

## エラー

IDがこのワークスペースに存在しない場合は`404 post_not_found`。

## よくある質問

### 投稿の処理が完了したことはどうすればわかりますか？

settledがtrueになるまでGET /posts/{id}をポーリングします。完了すると、各投稿先はurl付きのpublished、またはerror付きのfailedになります。

### 100件を超える投稿を一覧表示できますか？

まだできません。一覧で返るのは最新の100件までです。

### 投稿がpartialになっているのはなぜですか？

一部の投稿先では公開され、ほかの投稿先では失敗しました。targets[].errorを確認してください。
