Posteady
Posteady Docs
User guideDeveloper guidesAPI referenceMCP
Developer guidesHow-to guides

Write posts for several channels

Get a post for each account from one source, in that account's persona voice, then publish or schedule each one.

Give Posteady one source — text, a public link, or one of your published posts — and the accounts to write for. Posteady writes a post for each account in the voice of the account's persona and in the platform's format, the same way as Multiple channels at once in the Posteady app. One request returns all the posts. Posteady doesn't save or publish them; you publish or schedule each account's posts yourself.

Flow

  1. List accounts and pick one account per platform. Each account needs an active persona.
  2. Write the posts. The request waits until the posts are written, which usually takes 10 to 30 seconds.
  3. Publish or schedule each account's posts.

Write the posts

Provide exactly one source: text, url, or post. In targets, list the accounts to write for, one account per platform.

curl --request POST "https://www.posteady.com/api/v1/channel-texts" \
  --header "Authorization: Bearer $POSTEADY_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "url": "https://example.com/blog/spring-menu",
  "targets": [
    { "accountId": "11111111-1111-4111-8111-111111111111" },
    { "accountId": "22222222-2222-4222-8222-222222222222" },
    { "accountId": "33333333-3333-4333-8333-333333333333" }
  ]
}'
{
  "channels": [
    {
      "accountId": "11111111-1111-4111-8111-111111111111",
      "platform": "threads",
      "personaId": "44444444-4444-4444-8444-444444444444",
      "posts": [
        "Spring is on the menu from March 3.",
        "Three seasonal drinks and a new weekend brunch set. Which one are you trying first?"
      ]
    },
    {
      "accountId": "22222222-2222-4222-8222-222222222222",
      "platform": "linkedin",
      "personaId": "55555555-5555-4555-8555-555555555555",
      "posts": ["We are launching our spring menu on March 3, with three seasonal drinks and a new brunch set."]
    },
    {
      "accountId": "33333333-3333-4333-8333-333333333333",
      "platform": "instagram",
      "personaId": "66666666-6666-4666-8666-666666666666",
      "posts": ["Spring menu drops March 3. Three new drinks and a weekend brunch set."]
    }
  ],
  "failed": [],
  "sourceMedia": [{ "type": "IMAGE", "url": "https://example.com/images/spring-menu.jpg" }],
  "partialSource": false
}
SourceValueUse
textNotes, an article, or a script (up to 50,000 characters)Posteady writes from your text.
urlA public link to one social post, video, product page, or articlePosteady reads the link's text. Profile, channel, and search pages aren't supported.
postplatform and postId of one of your published postsUse postId from GET /api/v1/posts. Threads, X, LinkedIn, Instagram, and Facebook posts are supported.
OptionDescription
targets[].personaIdPersona whose voice to write in. Omit to use the account's most recently created active persona. The response's personaId shows which persona was used.
instructionsExtra direction for every channel, such as tone, audience, or points to emphasize (up to 1,000 characters).
lengthshort keeps only the key points. persona (default) follows the persona's usual length. full covers all main points even if the post gets longer.

Credits

Each written channel costs 5 credits. A url source costs 5 more credits once per request, for reading the link. For example, a link written for three channels costs 20 credits.

  • If some channels fail, they are listed in failed, and you aren't charged for them.
  • If every channel fails, the request returns an error, and you aren't charged.
  • Credits are charged channel by channel. If they run out partway, the channels that couldn't be charged are listed in failed with INSUFFICIENT_CREDITS. If there aren't enough credits to start, the request returns 402 INSUFFICIENT_CREDITS with the cost of the whole request.

Publish each channel

Each channel's posts are ready to publish as they are. A publishing request sends the same posts to every account in accountIds, so publish each channel in its own request.

platformWhere to put posts
threads, xposts. Several posts are published as a thread chain.
linkedinposts (always one post).
tiktokposts (one caption), together with video.
instagraminstagram.caption.
youtubeyoutube.description. Add your own title.
facebookfacebook.message.

For example, publish the Threads posts from the response above:

curl --request POST "https://www.posteady.com/api/v1/posts" \
  --header "Authorization: Bearer $POSTEADY_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "accountIds": ["11111111-1111-4111-8111-111111111111"],
  "posts": [
    "Spring is on the menu from March 3.",
    "Three seasonal drinks and a new weekend brunch set. Which one are you trying first?"
  ]
}'

Instagram, TikTok, and YouTube need media to publish. sourceMedia lists the images and videos found in a url or post source, but Posteady doesn't attach them, and their addresses can expire. To use one, import it from its URL and publish with the mediaId you get back.

Long threads

One publishing or scheduling request accepts up to 25 posts. With length set to full, a long source can produce a longer thread for Threads or X. Request a shorter length, or shorten the thread before you publish it.

A persona can add reference links, such as the source link, to its posts. On LinkedIn, Instagram, TikTok, YouTube, and Facebook, Posteady adds the links to the end of the post when the result stays within the platform's length limit. If it wouldn't fit, the post in posts stays within the limit and the links come back in firstComment. The Posteady app posts them as the first comment. Post them as a comment yourself, or shorten the post and add them.

When it fails

Status and error.codeMeaning and next step
402 INSUFFICIENT_CREDITSThe organization doesn't have enough credits to start this request. Nothing was written.
403 PLAN_REQUIREDThe organization's plan doesn't include API access or this source.
404 ACCOUNT_NOT_FOUND, 404 POST_NOT_FOUNDAn account in targets or the source post isn't in this workspace.
422 VALIDATION_ERRORInvalid input, two accounts on the same platform, an account without an active persona, an unsupported link, or a source with no text. Read error.message.
503 SERVICE_UNAVAILABLEPosteady couldn't read the source or write any channel in time. Nothing was charged. Try again.

A channel in failed has one of these codes. You aren't charged for it.

failed[].codeMeaning
INSUFFICIENT_CREDITSCredits ran out before this channel.
TIMEOUTWriting this channel took too long.
GENERATION_FAILEDPosteady couldn't write this channel. Try again.

Retry a request

This request has no requestId. Each request writes new posts and is charged again. If you didn't get a response, the posts may already have been written and charged.

Good to know

  • AI ideas and uploaded files as sources, and reading text in a link's images, are available only in the Posteady app.
  • Posteady doesn't write YouTube titles. Add your own when you publish.

Write posts reference · Publishing status · Error codes

On this page