Posts

Update post

Updates a post. Only the fields you send change. The social account is fixed (social_account_id is refused).

Send the destination's format and settings either as top-level content_type and meta (the post has one destination), or as platforms[] with the destination id. meta is merged with the stored settings: send null for a key to clear it (string, list and object settings; boolean settings cannot be cleared, so send true or false); thread_replies replaces the whole list. media replaces the post's media; label_ids replaces its labels.

status: publishing publishes the post now; scheduled schedules it at scheduled_at, in the queue (queue), or keeps its future scheduled_at; draft unschedules it (it is no longer published; the last scheduled_at stays on the draft). When scheduling or publishing, the content type must fit the media and the required settings must be present.

Posts that are publishing, published, partially published or failed cannot be edited: the request returns 422 with This post has already been processed and cannot be re-published. Duplicate it to try again.

Posts with several destinations (created before each channel got its own post) cannot be queued; platforms there lists the destinations to keep, and the rest are turned off. On this endpoint an invalid body may answer 422 before the 404 check of a post of another workspace.

put/posts/{post}

Request

  • Base URL: https://app.trypost.it/api
  • URL: https://app.trypost.it/api/posts/{post}
  • Auth: HTTP bearer

Request body

contentstring nullable

Post text, at most 25000 characters. When status is scheduled or publishing it must also fit each account's limit (max_content_length of the social account, for example 280 on X or 25000 for X accounts with long posts, 300 on Bluesky, 500 on Mastodon including the content warning), measured on the text the network receives. A scheduled or published post needs text or media.

status'draft' | 'scheduled' | 'publishing'

draft keeps the post editable. scheduled schedules it at scheduled_at or in the channel queue (queue). publishing publishes it now. Omit it to keep the current status.

content_type'instagram_feed' | 'instagram_reel' | 'instagram_story' | 'linkedin_post' | 'linkedin_page_post' | 'facebook_post' | 'facebook_reel' | 'facebook_story' | 'tiktok_video' | 'tiktok_photo' | 'youtube_short' | 'x_post' | 'threads_post' | 'threads_ghost_post' | 'pinterest_pin' | 'pinterest_video_pin' | 'pinterest_carousel' | 'bluesky_post' | 'mastodon_post' | 'telegram_post' | 'discord_message' | 'google_business_post'

Post format on one network. It must belong to the destination's network. GET /content-types lists the formats of each network with their media rules. Instagram and Facebook stories publish no text.

scheduled_atstring date-time nullable

With status: scheduled: required unless queue is sent or the post already has a future time; must be in the future and before 2038-01-19. Cannot be combined with queue.

queue'next' | 'top' | 'null' nullable

Queue position, only with status: scheduled. next takes the channel's first free slot; top takes its first slot and moves the queued posts behind it to the next gap. The channel must have posting times (has_posting_schedule). Cannot be combined with scheduled_at. Refused on posts with several destinations.

label_idsstring[]

Replaces the post's labels.

Example request

{
  "media": [
    {
      "url": "https://example.com/launch.jpg",
      "alt": "Product launch banner"
    }
  ],
  "meta": {
    "thread_replies": [
      {
        "text": "3/ Full changelog below.",
        "media": [
          {
            "url": "https://example.com/changelog.png"
          }
        ]
      }
    ]
  },
  "platforms": [
    {
      "meta": {
        "thread_replies": [
          {
            "text": "3/ Full changelog below.",
            "media": [
              {
                "url": "https://example.com/changelog.png"
              }
            ]
          }
        ]
      }
    }
  ]
}

Response

The updated post.

idstring uuid
post_group_idstring uuid nullable

Shared by the posts created in one batch.

contentstring nullable

Post text, stored as sent (posts written in the app hold the editor's HTML).

status'draft' | 'pending_approval' | 'scheduled' | 'publishing' | 'published' | 'partially_published' | 'failed'

pending_approval is a post a member who needs approval asked to schedule or publish.

schedule_mode'queue' | 'custom' | 'null' nullable

queue: the post holds a slot of the channel's posting schedule. custom: it is scheduled at its own time.

scheduled_atstring nullable

UTC, format Y-m-d H:i:s.

published_atstring nullable

UTC, format Y-m-d H:i:s.

approval_requested_atstring nullable

UTC, format Y-m-d H:i:s.

approved_atstring nullable

UTC, format Y-m-d H:i:s.

origin'trypost' | 'network'

network for posts imported from the network (published outside TryPost).

created_atstring

UTC, format Y-m-d H:i:s.

updated_atstring

UTC, format Y-m-d H:i:s.

Example response

{
  "id": "9d3c1f2a-6b4e-4c8a-9f1e-2a7b5c8d0e41",
  "post_group_id": "9d3c1f29-e0a1-4b7c-8d2e-5f6a7b8c9d03",
  "author": {
    "id": "9b1e2d3c-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
    "name": "Ana Souza"
  },
  "content": "We just shipped scheduled threads. Here is how they work.",
  "media": [
    {
      "id": "9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f",
      "path": "medias/9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f.jpg",
      "url": "https://media.trypost.it/medias/9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f.jpg",
      "type": "image",
      "mime_type": "image/jpeg",
      "original_filename": "launch.jpg",
      "size": 482113,
      "meta": {
        "width": 1080,
        "height": 1350,
        "alt_text": "Product launch banner"
      }
    }
  ],
  "status": "scheduled",
  "schedule_mode": "custom",
  "scheduled_at": "2026-10-12 14:00:00",
  "published_at": null,
  "approval_requested_by": null,
  "approval_requested_at": null,
  "approved_by": null,
  "approved_at": null,
  "recurrence": null,
  "origin": "trypost",
  "platforms": [
    {
      "id": "9d3c1f2b-1a2b-4c3d-8e4f-5a6b7c8d9e10",
      "platform": "x",
      "content_type": "x_post",
      "meta": {
        "thread_replies": [
          {
            "text": "2/ Replies publish under the first post.",
            "media": []
          }
        ]
      },
      "status": "pending",
      "enabled": true,
      "platform_url": null,
      "published_at": null,
      "error_message": null,
      "display_name": "TryPost",
      "display_username": "trypostit",
      "display_avatar": "https://pbs.twimg.com/profile_images/1790000000000000000/avatar_400x400.jpg",
      "social_account": {
        "id": "9c8b7a65-4d3e-4f2a-8b1c-0d9e8f7a6b54",
        "platform": "x",
        "display_name": "TryPost",
        "username": "trypostit",
        "status": "connected",
        "has_posting_schedule": true,
        "timezone": "America/Sao_Paulo",
        "posting_goal": 5,
        "max_content_length": 280,
        "long_posts": false,
        "verified_badge": null
      }
    }
  ],
  "labels": [
    {
      "id": "9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f",
      "name": "Launch",
      "color": "#2563EB",
      "created_at": "2026-09-01 10:00:00",
      "updated_at": "2026-09-01 10:00:00"
    }
  ],
  "created_at": "2026-10-08 13:20:11",
  "updated_at": "2026-10-08 13:20:11"
}

Changes

No recorded changes to this operation across all 1 revision of this API.