Setu Recipes: reusable digital workers across every app.Browse templates

Integrations / Typefully

Typefully

Social media drafting and scheduling for X, LinkedIn, Threads, Bluesky and Mastodon (API v2).

7 actions API key 4 read2 write1 destructive Calls api.typefully.com

Connect

TypeScript
const conn = await setu.connections.initiate({ userId: "user_1", toolkit: "typefully" });
console.log(conn.connectUrl); // show this to your user
await conn.waitUntilActive();

Permissions requested

This toolkit uses a single credential and requests no scopes.

Actions

Create draftwritetypefully.create_draftCreate a draft post or thread. platforms is an object keyed by network, e.g. {"x": {"enabled": true, "posts": [{"text": "Hello world"}]}}; one posts entry per tweet in a thread. Without publish_at it stays an unpublished draft.
InputTypeDescription
social_set_idintegerRequiredSocial set id from list_social_sets
platformsobjectRequiredPer-network content: keys x, linkedin, threads, bluesky, mastodon; each {enabled, posts:[{text}]}
draft_titlestringOptionalInternal title, never posted
tagsarray of stringOptionalExisting tag slugs
publish_atstringOptionalLeave out to keep a draft. now, next-free-slot, or a future ISO datetime with timezone. This publishes publicly.
TypeScript
await setu.execute({
  userId: "user_1",
  action: "typefully.create_draft",
  input: {
    "social_set_id": 1,
    "platforms": {}
  },
});
Delete draftdestructivetypefully.delete_draftPermanently delete a draft (or scheduled post) from a social set.
InputTypeDescription
social_set_idintegerRequiredSocial set id from list_social_sets
draft_idintegerRequiredDraft id
TypeScript
await setu.execute({
  userId: "user_1",
  action: "typefully.delete_draft",
  input: {
    "social_set_id": 1,
    "draft_id": 1
  },
  confirm: true,
});
Get draftreadtypefully.get_draftGet one draft with its status, preview text, schedule and published links.
InputTypeDescription
social_set_idintegerRequiredSocial set id from list_social_sets
draft_idintegerRequiredDraft id
TypeScript
await setu.execute({
  userId: "user_1",
  action: "typefully.get_draft",
  input: {
    "social_set_id": 1,
    "draft_id": 1
  },
});
Get current userreadtypefully.get_meGet the Typefully user the API key belongs to (id, name, email).

No input.

TypeScript
await setu.execute({
  userId: "user_1",
  action: "typefully.get_me",
  input: {},
});
List draftsreadtypefully.list_draftsList drafts of a social set, optionally filtered by status (draft, scheduled, published) or tag.
InputTypeDescription
social_set_idintegerRequiredSocial set id from list_social_sets
statusstringOptionalFilter by status, e.g. draft, scheduled, published
tagstringOptionalFilter by tag slug
limitintegerOptionalPage size (default 10, max 50)
offsetintegerOptionalOffset
TypeScript
await setu.execute({
  userId: "user_1",
  action: "typefully.list_drafts",
  input: {
    "social_set_id": 1
  },
});
List social setsreadtypefully.list_social_setsList the connected social accounts (social sets) the key can use. Every draft action needs a social set id from here.
InputTypeDescription
limitintegerOptionalPage size
offsetintegerOptionalOffset
TypeScript
await setu.execute({
  userId: "user_1",
  action: "typefully.list_social_sets",
  input: {},
});
Schedule or publish draftwritetypefully.schedule_draftSchedule an existing draft by setting publish_at to a future ISO datetime with timezone, or next-free-slot. Using now publishes it immediately and publicly.
InputTypeDescription
social_set_idintegerRequiredSocial set id from list_social_sets
draft_idintegerRequiredDraft id
publish_atstringRequirednow, next-free-slot, or a future ISO datetime with timezone, e.g. 2027-12-20T09:00:00-05:00
TypeScript
await setu.execute({
  userId: "user_1",
  action: "typefully.schedule_draft",
  input: {
    "social_set_id": 1,
    "draft_id": 1,
    "publish_at": "<publish_at>"
  },
});