Posts

Create post

Creates one post on one social account.

  • status: draft (default) saves a draft.
  • status: scheduled with scheduled_at schedules it at that time; with queue (next or top) it takes a slot of the channel's posting schedule; with queue_slot it takes that exact free slot (from GET /channels/{account}/queue/slots).
  • status: publishing publishes it now.

Omitted content_type is chosen like the app does: on Pinterest a video makes pinterest_video_pin and several images pinterest_carousel, on TikTok images only make tiktok_photo, every other network takes its default format.

To schedule or publish, the destination needs its required settings in platforms[].meta (see PlatformMeta). API keys belong to workspace admins, who publish directly, so a post created through the API is never stored as pending_approval.

To post the same text on several channels at once, use POST /posts/batch.

post/posts

Request

  • Base URL: https://app.trypost.it/api
  • URL: https://app.trypost.it/api/posts
  • 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.

scheduled_atstring date-time nullable

When to publish, for status: scheduled. Any date string; must be in the future and before 2038-01-19. Cannot be combined with queue. Required with status: scheduled unless queue or queue_slot is sent.

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.

queue_slotstring date-time nullable

Instant of one free slot from GET /channels/{account}/queue/slots, only with status: scheduled. Stores the post as a queue post in that slot; refused when the slot is taken or held by a pending approval request. Before 2038-01-19. Cannot be combined with queue. Takes the place of scheduled_at when both are sent.

label_idsstring[]

Labels of this workspace.

Example request

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

Response

The created 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.