Posts

Create posts in batch

Creates one independent post per destination, as the app does when several channels are selected. The posts share a post_group_id. Each destination may override the shared content, media, content_type and meta.

status: scheduled schedules every post at scheduled_at or in each channel's queue (queue: next or top). One specific slot (queue_slot) is not taken here: use POST /posts or PUT /channels/{account}/queue/slot.

destinations[].meta follows the same per-network rules as platforms[].meta (see PlatformMeta), checked with the destination's network; errors are reported on destinations.N.meta.*. To schedule or publish, every destination needs its required settings and text or media. API keys belong to workspace admins, so these posts are never stored as pending_approval.

post/posts/batch

Request

  • Base URL: https://app.trypost.it/api
  • URL: https://app.trypost.it/api/posts/batch
  • Auth: HTTP bearer

Request body

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

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

contentstring nullable

Shared 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.

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 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. Every channel must have posting times (has_posting_schedule). Cannot be combined with scheduled_at.

label_idsstring[]

Labels of this workspace.

Example request

{
  "media": [
    {
      "url": "https://example.com/launch.jpg",
      "alt": "Product launch banner"
    }
  ],
  "destinations": [
    {
      "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"
              }
            ]
          }
        ]
      }
    }
  ]
}

Response

The created posts.

Example response

{
  "posts": [
    {
      "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.