Skip to content
BuzzTake
MenuClose
DocumentationPost to a community

How to post to a subreddit, Facebook group or Telegram channel

Last updated

A post goes to the account's own profile unless you name a destination. With one, BuzzTake posts into a subreddit, a Facebook Page or group, a LinkedIn company page, a Pinterest board or a Telegram channel or group, as the signed-in account.

You need a BuzzTake API key and an active account that is allowed to post in that place.

1. Name the destination the way the platform expects

PlatformdestinationRules
Redditr/name, name, u/name or a Reddit URLtitle is required. Text alone is a text post; add link for a link post or media for an image post, not both.
FacebookA Page or group URL, or a group idText, media or both, up to 30 photos or videos. link is ignored: put the link in text.
LinkedInA company page: acme, company/acme or its URLThe account must be an admin of the page. visibility is public or connections.
PinterestA board name, in any caseExactly one image or video. title and link are optional; without a title, the first line of text is used.
Telegram@name, a t.me link, a numeric chat id or a +phoneText only. The account must be a member that can write in the chat.
Note: X and Mastodon ignore destination, so a post to an X Community lands on the account's own profile. For a community post on X, use browser steps.

2. Post to a subreddit

POST/v1/accounts/{id}/actions

A Reddit post needs destination and title. Every BuzzTake post also needs text or media, so a link post carries a short body in text. link must start with http:// or https://.

curl

curl
curl https://api.buzztake.com/v1/accounts/$ACCOUNT_ID/actions \
  -H "Authorization: Bearer $BUZZTAKE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: reddit-release-0-9" \
  -d '{
    "type": "post",
    "destination": "r/selfhosted",
    "title": "Release 0.9: dark mode and a smaller image",
    "text": "Notes and upgrade steps are in the changelog.",
    "link": "https://example.com/changelog/0-9",
    "wait": 90
  }'

JavaScript

JavaScript
const res = await fetch(
  `https://api.buzztake.com/v1/accounts/${process.env.ACCOUNT_ID}/actions`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.BUZZTAKE_API_KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": "reddit-release-0-9",
    },
    body: JSON.stringify({
      type: "post",
      destination: "r/selfhosted",
      title: "Release 0.9: dark mode and a smaller image",
      text: "Notes and upgrade steps are in the changelog.",
      link: "https://example.com/changelog/0-9",
      wait: 90,
    }),
  },
);
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`);
const action = await res.json();
console.log(action.status, action.result?.url ?? action.error?.message ?? "");

Python

Python
import os
import requests

resp = requests.post(
    f"https://api.buzztake.com/v1/accounts/{os.environ['ACCOUNT_ID']}/actions",
    headers={
        "Authorization": f"Bearer {os.environ['BUZZTAKE_API_KEY']}",
        "Idempotency-Key": "reddit-release-0-9",
    },
    json={
        "type": "post",
        "destination": "r/selfhosted",
        "title": "Release 0.9: dark mode and a smaller image",
        "text": "Notes and upgrade steps are in the changelog.",
        "link": "https://example.com/changelog/0-9",
        "wait": 90,
    },
    timeout=100,
)
if not resp.ok:
    raise SystemExit(f"{resp.status_code}: {resp.text}")
action = resp.json()
print(action["status"], (action.get("result") or {}).get("url") or action.get("error"))

A succeeded action has result.url, the new post. Each post costs 10 credits, charged when it starts. BuzzTake has no field for post flair. If a community requires one, the action fails with rejected; post there from the live browser or use browser steps.

3. Post to a Facebook group or a LinkedIn company page

Send the same action with the destination for that platform. Facebook ignores link, so put links in the text.

Facebook group: body
{
  "type": "post",
  "destination": "https://www.facebook.com/groups/selfhosting.club",
  "text": "Release 0.9 is out: https://example.com/changelog/0-9",
  "wait": 90
}

On LinkedIn, the account must be an admin of the company page. visibility takes public (Anyone) or connections (Connections only).

LinkedIn company page: body
{
  "type": "post",
  "destination": "company/acme",
  "text": "Release 0.9 is out. Dark mode, and a smaller image.",
  "visibility": "public",
  "wait": 90
}

4. Pin to a Pinterest board

A Pin needs exactly one image or video in media; upload it first asthe quickstart shows. destination is the board's name as the account sees it.

Pinterest board: body
{
  "type": "post",
  "destination": "Product screenshots",
  "media": ["0199f7a8-..."],
  "title": "Dark mode",
  "link": "https://example.com/changelog/0-9",
  "wait": 120
}

5. Post to a Telegram channel or group

Telegram posts are text only. The account must already be a member of the chat. If it is not, join with the follow action, which is Join on Telegram and costs 3 credits:

Join the channel
curl https://api.buzztake.com/v1/accounts/$ACCOUNT_ID/actions \
  -H "Authorization: Bearer $BUZZTAKE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "type": "follow", "user": "@acme_updates", "wait": 60 }'
Telegram channel: body
{
  "type": "post",
  "destination": "@acme_updates",
  "text": "Release 0.9 is out: https://example.com/changelog/0-9",
  "wait": 60
}

6. Post to several places at once

One action has one destination. To post into three subreddits, send three actions, each with its own Idempotency-Key. The batch route posts from many accounts, but each account gets the same destination, so it suits several accounts posting into one place.

Common errors

These come back on the action as error.code and error.message.

invalid_input
"invalid input: a Reddit post needs destination: a community such as r/rust, or u/<you>"
invalid_input
"invalid input: a Reddit post needs a title"
invalid_input
"invalid input: a Reddit post is a link post or a media post, not both"
invalid_input
"invalid input: destination must name a company page (acme, company/acme or its URL)"
invalid_input
"invalid input: a pin needs exactly one image or video"
invalid_input
"invalid input: the Telegram driver sends text only"
not_found
"not found: no board named Product screenshots". Check the board's name in Pinterest.
rejected
"the community requires a post flair", "the member does not admin the company page", or "join the chat before writing to it", each after "the platform rejected the action: ".

The invalid_input errors come before anything is posted, and their credits are refunded.

See also

To run this on your own accounts, create a BuzzTake account, then add an account and an API key.