Social

Social

Find the accounts a render can post to, and follow or change the posts it made. Posting itself is the publish block on a render. Accounts are connected in the dashboard (Social), since each platform asks you to sign in. Reading needs the social:read scope, changing a post social:write — every API key has both.

Social

GET /v1/social/accounts

GET/v1/social/accounts

The workspace's connected social accounts. Their ids are what publish.accountIds takes. needsReconnect means the account must be reconnected in the dashboard before it can post.

curl https://buildonce.app/v1/social/accounts \
  -H "Authorization: Bearer fl_live_YOUR_API_KEY"
Response
[
  {
    "id": "sac_li1",
    "platform": "linkedin",
    "externalId": "urn:li:person:abc",
    "displayName": "Jordan Lee",
    "avatarUrl": "https://...",
    "scopes": ["w_member_social"],
    "connectedAt": "2026-10-01T09:00:00.000Z",
    "tokenExpiresAt": "2026-12-01T09:00:00.000Z",
    "needsReconnect": false
  }
]
Social

GET /v1/social/posts

GET/v1/social/posts

Posts and scheduled posts, newest first, paginated.

ParamTypeNotes
page / limitnumberDefaults to 1 and 25; limit at most 100.
renderIdstringOnly the posts one render request’s publish block made.
status"scheduled" | "publishing" | "published" | "failed" | "canceled" | "deleted"
platformstringlinkedin, instagram, facebook, threads, x, tiktok, youtube, pinterest, discord or bluesky.
accountIdstringOne connected account (sac_…).
from / toISO 8601Bound the creation date, inclusive.
Response
{
  "items": [ {
      "id": "spo_123",
      "socialAccountId": "sac_li1",
      "platform": "linkedin",
      "status": "scheduled",
      "content": "Check out our latest design!",
      "mediaUrls": ["https://.../renders/9de8...b5.png"],
      "scheduledAt": "2026-10-25T04:00:00.000Z",
      "publishedAt": null,
      "postUrl": null,
      "error": null,
      "renderId": "rnd_456",
      "createdAt": "2026-10-22T12:00:00.000Z"
    } ],
  "total": 1,
  "page": 1,
  "limit": 25
}
Social

GET /v1/social/posts/:postId

GET/v1/social/posts/:postId

One post with its outcome: status, postUrl once published, and for a failed post an error explaining what went wrong and how to fix it.

Response
{
  "id": "spo_123",
  "socialAccountId": "sac_li1",
  "platform": "linkedin",
  "status": "scheduled",
  "content": "Check out our latest design!",
  "mediaUrls": ["https://.../renders/9de8...b5.png"],
  "scheduledAt": "2026-10-25T04:00:00.000Z",
  "publishedAt": null,
  "postUrl": null,
  "error": null,
  "renderId": "rnd_456",
  "createdAt": "2026-10-22T12:00:00.000Z"
}
Social

PATCH /v1/social/posts/:postId

PATCH/v1/social/posts/:postId

Change a post that is still scheduled. It is checked against the platform's rules again, as a new post would be. A post already sent is a 404.

ParamTypeNotes
contentstringNew text.
scheduledAtstringA new time: ISO 8601, in the future.
mediaUrlsstring[]Replace the media, e.g. with the files of a rerender.
linkUrl / title / description / tags / platformOptionsAs on publish.
curl -X PATCH https://buildonce.app/v1/social/posts/spo_123 \
  -H "Authorization: Bearer fl_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "scheduledAt": "2026-10-26T09:00:00+05:00" }'
Social

DELETE /v1/social/posts/:postId

DELETE/v1/social/posts/:postId

Cancel a post that is still scheduled. Answers { canceled: true }; a post already sent is a 404.

curl -X DELETE https://buildonce.app/v1/social/posts/spo_123 \
  -H "Authorization: Bearer fl_live_YOUR_API_KEY"

Was this page helpful?