GET /api/v1/posts2025-03-01T00:00:002025-03-31T23:59:59curl "https://blacktwist.app/api/v1/posts?from=2025-03-01T00:00:00&to=2025-03-31T23:59:59&providerId=clx...." \
-H "Authorization: Bearer bt_api_..."{
"threads": [
{
"threadId": "abc123xyz",
"scheduledAt": "2025-03-15T09:00:00.000Z",
"provider": "THREADS",
"providerUserId": "12345678",
"status": "READY",
"posts": [
{
"id": "post_001",
"content": "First post in the thread",
"postOrder": 0,
"images": [],
"topic": "marketing",
"status": "READY",
"publishedAt": null,
"permaLink": null,
"autoRepostDelay": ["168"],
"postMedia": [],
"analytics": null,
"spoilerRanges": [{ "offset": 0, "length": 5 }],
"isSpoilerMedia": false
}
]
}
],
"count": 1
}POST /api/v1/postsscheduleAt to save as a draft. Provide multiple items in the posts array to create a thread.Request Body:/providers endpoint{ url, altText? } objects with public image URLs{ offset, length } objects marking character ranges in the post text as spoilers. offset is a 0-indexed character position; length is the number of characters. Max 10 ranges per post.true, all media attached to the post is marked as a spoiler. Ignored by non-Threads providers.2025-03-15T09:00:00. Interpreted in your configured timezone unless a timezone offset is included.enabled (boolean) and delays (string array with exactly one delay value in hours, e.g. ["6"] for 6 hours). Only a single delay is supported.curl -X POST https://blacktwist.app/api/v1/posts \
-H "Authorization: Bearer bt_api_..." \
-H "Content-Type: application/json" \
-d '{
"providerId": "clx....",
"posts": [
{
"text": "First post in a thread",
"topic": "marketing",
"media": [
{ "url": "https://example.com/image.jpg", "altText": "A photo" }
],
"spoilerRanges": [{ "offset": 0, "length": 5 }],
"isSpoilerMedia": true
},
{
"text": "Second post in the thread"
}
],
"scheduleAt": "2025-03-15T09:00:00",
"autoRepost": {
"enabled": true,
"delays": ["6"]
}
}'{
"threadId": "abc123xyz",
"status": "scheduled",
"scheduledAt": "2025-03-15T09:00:00.000Z",
"postCount": 2,
"autoPlugApplied": true
}GET /api/v1/posts/draftscurl https://blacktwist.app/api/v1/posts/drafts \
-H "Authorization: Bearer bt_api_..."{
"drafts": [
{
"threadId": "draft_abc123",
"provider": "THREADS",
"providerUserId": "12345678",
"createdAt": "2025-03-10T14:00:00.000Z",
"posts": [
{
"id": "post_d01",
"content": "Draft post content",
"postOrder": 0,
"images": [],
"topic": null,
"postMedia": [],
"spoilerRanges": [],
"isSpoilerMedia": false
}
]
}
],
"count": 1
}GET /api/v1/posts/:threadIdcurl https://blacktwist.app/api/v1/posts/abc123xyz \
-H "Authorization: Bearer bt_api_..."{
"thread": {
"threadId": "abc123xyz",
"scheduledAt": "2025-03-15T09:00:00.000Z",
"provider": "THREADS",
"providerUserId": "12345678",
"status": "READY",
"posts": [
{
"id": "post_001",
"content": "First post in the thread",
"postOrder": 0,
"images": [],
"topic": "marketing",
"status": "READY",
"publishedAt": null,
"permaLink": null,
"autoRepostDelay": [],
"postMedia": [],
"analytics": null,
"spoilerRanges": [{ "offset": 0, "length": 5 }],
"isSpoilerMedia": false
}
]
}
}DELETE /api/v1/posts/:threadIdcurl -X DELETE https://blacktwist.app/api/v1/posts/abc123xyz \
-H "Authorization: Bearer bt_api_..."{
"deleted": true,
"threadId": "abc123xyz",
"postsDeleted": 2
}PATCH /api/v1/posts/:threadId/posts/:postIdREADY can be edited. Provide at least one field to update.Request Body:null to remove){ url, altText? } objects. Replaces all existing media.{ offset, length } objects. Replaces all existing spoiler ranges. Pass [] to clear them. Max 10 ranges.false to clear.curl -X PATCH https://blacktwist.app/api/v1/posts/abc123xyz/posts/post_001 \
-H "Authorization: Bearer bt_api_..." \
-H "Content-Type: application/json" \
-d '{
"content": "Updated post content",
"topic": "growth",
"spoilerRanges": [{ "offset": 0, "length": 7 }],
"isSpoilerMedia": true
}'{
"postId": "post_001",
"threadId": "abc123xyz",
"updated": {
"content": true,
"topic": true,
"media": false,
"spoilerRanges": true,
"isSpoilerMedia": true
}
}PUT /api/v1/posts/:threadId/editid for existing posts to update them. Omit id to create new posts. Posts not included in the array are deleted. All posts must have status READY.Request Body:{ url, altText? } objects{ offset, length } objects. Omitting clears any existing spoiler ranges on the post (this endpoint replaces all post state). Max 10 ranges.curl -X PUT https://blacktwist.app/api/v1/posts/abc123xyz/edit \
-H "Authorization: Bearer bt_api_..." \
-H "Content-Type: application/json" \
-d '{
"posts": [
{
"id": "post_001",
"text": "Updated first post",
"spoilerRanges": [{ "offset": 0, "length": 7 }],
"isSpoilerMedia": true
},
{ "text": "Brand new second post", "topic": "growth" }
]
}'{
"threadId": "abc123xyz",
"postsUpdated": 1,
"postsCreated": 1,
"postsDeleted": 0,
"totalPosts": 2
}PUT /api/v1/posts/:threadId/rescheduleREADY (not yet published).Request Body:2025-04-01T10:00:00curl -X PUT https://blacktwist.app/api/v1/posts/abc123xyz/reschedule \
-H "Authorization: Bearer bt_api_..." \
-H "Content-Type: application/json" \
-d '{ "scheduleAt": "2025-04-01T10:00:00" }'{
"threadId": "abc123xyz",
"scheduledAt": "2025-04-01T10:00:00.000Z",
"postsUpdated": 2
}BlackTwist
Give your social a twist.
© Copyright 2026 BlackTwist. All rights reserved.