---
title: "Post a story"
locale: en
url: https://tlg.builera.app/en/docs/reference/rest/stories.post
verified: 2026-10-24
app_version: "2.0"
generated: true
---

# Post a story

Post a photo (JPEG) or video (MP4, ≤ 60 s, give duration/width/height) story for 24 hours from a file already uploaded to the account's outgoing folder; privacy everyone / contacts / close_friends; `pinned` keeps it on the profile afterwards. Caption ≤ 200 characters. Counts toward the 'Post story' daily limit. With `conversationId` (a channel / supergroup chat of the account, worker ≥ 1.0.33) the story is posted for that channel instead — always public; Telegram refuses with BOOSTS_REQUIRED / CHAT_ADMIN_REQUIRED when the channel lacks boosts or the account lacks the admin right.

Post a photo (JPEG) or video (MP4, ≤ 60 s, give duration/width/height) story for 24 hours from a file already uploaded to the account's outgoing folder; privacy everyone / contacts / close_friends; `pinned` keeps it on the profile afterwards. Caption ≤ 200 characters. Counts toward the 'Post story' daily limit. With `conversationId` (a channel / supergroup chat of the account, worker ≥ 1.0.33) the story is posted for that channel instead — always public; Telegram refuses with BOOSTS_REQUIRED / CHAT_ADMIN_REQUIRED when the channel lacks boosts or the account lacks the admin right.

## Overview

| Name | Value |
| --- | --- |
| Code | `stories.post` |
| Scope needed | `profile.write` |
| Risk | Write |
| May need confirmation | No |
| Runs as | Queues work for a node |
| Needs `Idempotency-Key` | Yes |
| Member roles allowed | `owner`, `manager` |
| Needs a worker from version | `1.0.29` |
| In the app | Accounts → Stories → Post story |

## Input fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `accountId` | `uuid` | Yes |   |
| `storagePath` | `text` | Yes |   |
| `kind` | `"photo" \| "video"` | Yes |   |
| `mime` | `text` | Yes |   |
| `caption` | `text` | No |   |
| `privacy` | `"everyone" \| "contacts" \| "close_friends"` | Yes |   |
| `pinned` | `true/false` | No |   |
| `video` | `object` | No |   |
| `conversationId` | `uuid` | No |   |

## Example request

```bash
curl -X POST https://tlg.builera.app/api/public/v2/ops/stories.post \
  -H "Authorization: Bearer $TELEGRAM_AUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <unique key per operation>" \
  -d '{"accountId":"00000000-0000-0000-0000-000000000000","storagePath":"…","kind":"photo","mime":"…","privacy":"everyone"}'
```

## Output fields (`data`)

| Field | Type | Required |
| --- | --- | --- |
| `ok` | `true` | Yes |
| `jobId` | `text` | Yes |

## Example answer

```json
{
  "data": {
    "ok": true,
    "jobId": "00000000-0000-4000-8000-000000000000"
  }
}
```

## Using it over MCP

Not listed on any profile: call `tools_describe` then `tools_run` with `code: "stories.post"`. Tool name when listed: `stories_post`.
