Update post content

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

Replaces a post's text with the text you supply, and returns the whole updated plan.

This is the plain-edit counterpart to Refine a post: it saves the text you send, calls no language model, and costs no credits. Only the post's content changes, so its image and every other post stay as they are.

<Note>The text is sanitized before it is stored, so what you read back can differ from what you sent. XML and HTML tags, code fences, and lines starting system:, assistant:, or user: are removed. Read content off the response rather than assuming your input was stored verbatim.</Note>

A 409 means repeated write conflicts on the plan did not settle, so retry the request. This endpoint shares a limit of 15 requests per minute with the other social content endpoints.

<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 may include fields beyond the ones documented here. Don't use any undocumented fields, as they can change at any time.</Warning>

put/api/apps/{app_id}/virality/posts/{post_id}

Path parameters

post_idstring required

ID of the post, as returned in the content plan. Must be a UUID.

ID of the post, as returned in the content plan. Must be a UUID.

app_idstring required

ID of the app.

ID of the app.

Request body

contentstring required

The post text to save, replacing whatever the post held before. Sanitized before it is stored, so XML or HTML tags, code fences, and lines starting system:, assistant:, or user: are removed.

Example request

{
  "content": "Still tracking leads in a spreadsheet? I built the thing I wanted instead."
}

Response

The content plan, with this post's text replaced.

Example response

{
  "plan": {
    "id": "8c1f9a2e-3b7d-4c5e-9f01-2a3b4c5d6e7f",
    "app_id": "6820f3a4e7b91d003c45a1f2",
    "strategy": {
      "app_summary": "A CRM for freelancers who want to track leads without a spreadsheet.",
      "marketing_approach": "Lead with the spreadsheet pain, then show the app solving it.",
      "platforms": [
        {
          "reasoning": "Instagram rewards a consistent series, so these build on each other.",
          "posts": [
            {
              "id": "3f2504e0-4f89-11d3-9a0c-0305e82c3301",
              "angle_label": "Pain point",
              "post_number": 1,
              "total_posts": 5,
              "suggested_day": 1,
              "rationale": "Opens on the spreadsheet frustration the audience already has.",
              "content": "Still tracking leads in a spreadsheet? I built the thing I wanted instead.",
              "image_url": "https://storage.base44.com/virality/3f2504e0.png",
              "image_prompt": "A freelancer closing a laptop at a tidy desk, warm morning light",
              "hashtags": [
                "freelance",
                "buildinpublic"
              ],
              "post_title": "I built a CRM because spreadsheets kept losing my leads",
              "suggested_subreddits": [
                "r/freelance",
                "r/SideProject"
              ],
              "launch_comment": "Happy to answer questions about how it works.",
              "option_label": "Direct and personal",
              "best_for_context": "Best if your audience already knows you"
            }
          ]
        }
      ]
    },
    "created_at": "2026-08-24T09:15:00+00:00",
    "updated_at": "2026-08-24T10:02:00+00:00"
  }
}

Changes