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
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.
| Input | Type | Description | |
|---|---|---|---|
social_set_id | integer | Required | Social set id from list_social_sets |
platforms | object | Required | Per-network content: keys x, linkedin, threads, bluesky, mastodon; each {enabled, posts:[{text}]} |
draft_title | string | Optional | Internal title, never posted |
tags | array of string | Optional | Existing tag slugs |
publish_at | string | Optional | Leave out to keep a draft. now, next-free-slot, or a future ISO datetime with timezone. This publishes publicly. |
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.
| Input | Type | Description | |
|---|---|---|---|
social_set_id | integer | Required | Social set id from list_social_sets |
draft_id | integer | Required | Draft id |
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.
| Input | Type | Description | |
|---|---|---|---|
social_set_id | integer | Required | Social set id from list_social_sets |
draft_id | integer | Required | Draft id |
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.
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.
| Input | Type | Description | |
|---|---|---|---|
social_set_id | integer | Required | Social set id from list_social_sets |
status | string | Optional | Filter by status, e.g. draft, scheduled, published |
tag | string | Optional | Filter by tag slug |
limit | integer | Optional | Page size (default 10, max 50) |
offset | integer | Optional | Offset |
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.
| Input | Type | Description | |
|---|---|---|---|
limit | integer | Optional | Page size |
offset | integer | Optional | Offset |
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.
| Input | Type | Description | |
|---|---|---|---|
social_set_id | integer | Required | Social set id from list_social_sets |
draft_id | integer | Required | Draft id |
publish_at | string | Required | now, next-free-slot, or a future ISO datetime with timezone, e.g. 2027-12-20T09:00:00-05:00 |
await setu.execute({
userId: "user_1",
action: "typefully.schedule_draft",
input: {
"social_set_id": 1,
"draft_id": 1,
"publish_at": "<publish_at>"
},
});