---
title: "Generate teaser posts"
method: POST
path: "/api/apps/{app_id}/virality/teaser"
---

# Generate teaser posts

`POST /api/apps/{app_id}/virality/teaser`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Generates two social posts for an app, one for Instagram and one for LinkedIn, each with an image. They're written from the app alone, with no questions to answer first, and they're separate from the content plan.

The posts are generated once per app. Calling this again returns the existing posts rather than new ones, and a call while they're generating starts nothing. A failed generation can run again a day after it failed, and one that stops without finishing can run again after 4 minutes. Base44 can also regenerate the posts once after a change to their format.

The call returns as soon as generation starts, with a `status` of `generating`. Poll [Get social content state](/api-reference/get-social-content-state) and read `teaser` until its `status` is `ready` or `failed`. Generation takes up to 3 minutes. When Base44 has teaser generation turned off, the call returns a `status` of `null` and no posts.

This endpoint calls a language model and an image model, but it's free. It doesn't use any credits.

This is limited to 5 requests a minute per app for each workspace's personal API keys, so every key in a workspace shares one allowance, separately from the other social content endpoints. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

## Path parameters

- `app_id` string, required — ID of the app.

## Response `200`

Successful Response

- TeaserSummary — The standalone teaser posts for an app and the state of their generation.
  - `status` 'generating' | 'ready' | 'failed'
  - `post` SocialPost
    - `id` string, nullable — ID of the post. Pass it as `post_id` to [Refine a post](/api-reference/refine-a-post), [Update post content](/api-reference/update-post-content), and [Generate a post image](/api-reference/generate-a-post-image).
    - `platform` 'x' | 'instagram' | 'tiktok' | 'linkedin' | 'reddit' | 'facebook'
    - `angle` 'pain_point' | 'feature_demo' | 'social_proof' | 'trending_hook' | 'user_story' | 'before_after'
    - `angle_label` string, nullable — Human-readable label for the angle.
    - `post_number` integer, nullable — Position of this post within its platform's set, starting at 1.
    - `total_posts` integer, nullable — Number of posts generated for this platform.
    - `suggested_day` integer, nullable — Suggested day to publish on, counted from the start of the campaign.
    - `rationale` string, nullable — Why this post works for this platform and angle.
    - `content` string, nullable — The post text, ready to publish. Change it with [Update post content](/api-reference/update-post-content).
    - `image_url` string, nullable — URL of the post image, or `null` if no image was generated yet. Create one with [Generate a post image](/api-reference/generate-a-post-image).
    - `image_prompt` string, nullable — Prompt used to generate the post image, or `null` if the post has none.
    - `hashtags` string[], nullable — Suggested hashtags, without the leading `#`.
    - `post_title` string, nullable — Title for platforms that use one, such as Reddit and LinkedIn, or `null` elsewhere.
    - `suggested_subreddits` string[], nullable — Subreddits to consider for a Reddit post. Empty for other platforms.
    - `launch_comment` string, nullable — First comment to post under the main post, or `null` if none was generated.
    - `option_label` string, nullable — Label for this post when the platform's `mode` is `selection`, so you can tell the alternatives apart, or `null` in `series` mode.
    - `best_for_context` string, nullable — When to prefer this option over the others, or `null` if not applicable.
  - `posts` SocialPost[] — The teaser posts, one per platform. A regeneration keeps the posts it is replacing, so these can be set while `status` is `generating`.
    - `id` string, nullable — ID of the post. Pass it as `post_id` to [Refine a post](/api-reference/refine-a-post), [Update post content](/api-reference/update-post-content), and [Generate a post image](/api-reference/generate-a-post-image).
    - `platform` 'x' | 'instagram' | 'tiktok' | 'linkedin' | 'reddit' | 'facebook'
    - `angle` 'pain_point' | 'feature_demo' | 'social_proof' | 'trending_hook' | 'user_story' | 'before_after'
    - `angle_label` string, nullable — Human-readable label for the angle.
    - `post_number` integer, nullable — Position of this post within its platform's set, starting at 1.
    - `total_posts` integer, nullable — Number of posts generated for this platform.
    - `suggested_day` integer, nullable — Suggested day to publish on, counted from the start of the campaign.
    - `rationale` string, nullable — Why this post works for this platform and angle.
    - `content` string, nullable — The post text, ready to publish. Change it with [Update post content](/api-reference/update-post-content).
    - `image_url` string, nullable — URL of the post image, or `null` if no image was generated yet. Create one with [Generate a post image](/api-reference/generate-a-post-image).
    - `image_prompt` string, nullable — Prompt used to generate the post image, or `null` if the post has none.
    - `hashtags` string[], nullable — Suggested hashtags, without the leading `#`.
    - `post_title` string, nullable — Title for platforms that use one, such as Reddit and LinkedIn, or `null` elsewhere.
    - `suggested_subreddits` string[], nullable — Subreddits to consider for a Reddit post. Empty for other platforms.
    - `launch_comment` string, nullable — First comment to post under the main post, or `null` if none was generated.
    - `option_label` string, nullable — Label for this post when the platform's `mode` is `selection`, so you can tell the alternatives apart, or `null` in `series` mode.
    - `best_for_context` string, nullable — When to prefer this option over the others, or `null` if not applicable.

## Other responses

- `401` — Missing or invalid credentials.
- `403` — You don't have editor access to this app, or you used a read-only or workspace API key.
- `404` — App not found, or the social content feature is not enabled for your account.
- `429` — Rate limit exceeded (5 requests per minute).

## Changes

- **2026-09-30** `e2a6a9f1fe4c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/:app_id/virality/teaser/post.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/idealspot/apis/base44-app-management-api/revisions/e58d4ff7b1f8?raw)
