# Work with publishing accounts and posts

> Select an account that can publish, create a TikTok draft from reviewed HTTPS media, and inspect or update it before scheduling.

Canonical: https://entirefeed.com/docs/publishing/accounts-and-posts

Publishing starts with a connected account and a draft. MCP currently creates TikTok drafts with `VIDEO`, `IMAGE`, or `CAROUSEL` content and HTTPS media URLs. Creating or updating a draft does not schedule or publish it.

Always read `can_publish` and `publish_unavailable_reason` from account discovery. For an existing post, use the compact list to find it and then load its full detail before changing captions, media, or account selection.

## Find an account that can publish

List accounts before creating a post for an unfamiliar account. Proceed only when the selected account returns `can_publish: true`; otherwise show `publish_unavailable_reason` and stop:

### list_console_publishing_accounts

```json
{
  "tool": "list_console_publishing_accounts",
  "arguments": {}
}
```

### list_console_publishing_posts

```json
{
  "tool": "list_console_publishing_posts",
  "arguments": {
    "account_id": "33333333-3333-4333-8333-333333333333",
    "limit": 20,
    "sort": "updated_desc"
  }
}
```

```json
{
  "accounts": [
    {
      "id": "33333333-3333-4333-8333-333333333333",
      "platform": "TIKTOK",
      "username": "brandstudio",
      "is_active": true,
      "is_verified": true,
      "can_publish": true,
      "publish_unavailable_reason": null
    }
  ],
  "count": 1
}
```

## Create a draft from reviewed media

Draft creation currently accepts `TIKTOK` with `VIDEO`, `IMAGE`, `CAROUSEL` content. Every media URL must use HTTPS. Creation does not schedule or publish the draft:

### create_console_publishing_post

```json
{
  "tool": "create_console_publishing_post",
  "arguments": {
    "account_id": "33333333-3333-4333-8333-333333333333",
    "platform": "TIKTOK",
    "content_type": "VIDEO",
    "media_urls": [
      "https://cdn.example.com/product-reveal.mp4"
    ],
    "caption": "A closer look at the new release.",
    "hashtags": [
      "launch",
      "product"
    ]
  }
}
```

```json
{
  "post": {
    "id": "22222222-2222-4222-8222-222222222222",
    "platform": "TIKTOK",
    "content_type": "VIDEO",
    "status": "DRAFT",
    "media_urls": [
      "https://cdn.example.com/product-reveal.mp4"
    ],
    "caption": "A closer look at the new release."
  },
  "next": "Use schedule_console_publishing_post when the draft is approved."
}
```

## Inspect and update the draft

Use the compact post list for discovery, then get the full post before updating it. Omitted patch fields stay unchanged; explicit `null` clears nullable fields. Re-read after the write, and re-read before repeating a mutation after an uncertain response:

### get_console_publishing_post (before edit)

```json
{
  "tool": "get_console_publishing_post",
  "arguments": {
    "post_id": "22222222-2222-4222-8222-222222222222"
  }
}
```

### update_console_publishing_post

```json
{
  "tool": "update_console_publishing_post",
  "arguments": {
    "post_id": "22222222-2222-4222-8222-222222222222",
    "patch": {
      "caption": "A closer look at the new release. Available now.",
      "hashtags": [
        "launch",
        "product",
        "newrelease"
      ]
    }
  }
}
```

### get_console_publishing_post (after edit)

```json
{
  "tool": "get_console_publishing_post",
  "arguments": {
    "post_id": "22222222-2222-4222-8222-222222222222"
  }
}
```

## Understand post status

| Status | Phase | Required action |
| --- | --- | --- |
| `DRAFT`, `PENDING_REVIEW`, `APPROVED` | Preparation | Review the full post and account availability before scheduling. |
| `SCHEDULED`, `QUEUED`, `PUBLISHING` | Active | Read the current post and scheduled action; do not schedule it again. |
| `PUBLISHED` | Complete | Read the post and analytics; no further scheduling action is needed. |
| `FAILED` | Failed | Inspect the post and error before deciding whether new scheduling is intended. |
| `ARCHIVED` | Terminal | Do not schedule an archived post. |
