Twitter Thread without Images API
Creates a new Twitter thread consisting purely of text content without any image attachments. This endpoint is perfect for storytelling, sharing insights, educational content, and engaging narratives that rely on compelling written content.
Endpoint Details
POST https://portfolio.tigest.club/api/v1/dashboard/post/webhook
Content-Type: multipart/form-data
Request Parameters
Parameter | Type | Required | Description | Valid Values | Example |
---|---|---|---|---|---|
channel | string | Yes | Target platform (always Twitter) | "Twitter" | ”Twitter” |
post_type | string | Yes | Type of content being posted | "thread" | ”thread” |
post_content | string | Yes | JSON string defining thread structure and content | Valid JSON with thread segments | See examples below |
calendar_uuid | string | Yes | Unique identifier for your content calendar | Valid UUID format | ”69a1bf45-c48e-46cf-bd53-f47f3efa9763” |
scheduled_at | string | Yes | Publication date and time in ISO 8601 format | Future datetime in UTC | ”2025-05-30T21:30:00Z” |
status | string | Yes | Post publication status | "draft" , "published" , "scheduled" | ”draft” |
Parameter Details
post_content Structure:
{
"0": {
"text": "First tweet content here...",
"images": []
},
"1": {
"text": "Second tweet content here...",
"images": []
}
}
Content Guidelines:
- Thread Length: Maximum 25 tweets per thread
- Character Limit: Each tweet segment must be 280 characters or less
- Images Array: Always empty
[]
for text-only threads - Text Optimization: Make every character count for maximum impact
- Readability: Use clear, concise language for easy consumption
Example Requests
Startup Journey Thread
curl --location 'https://portfolio.tigest.club/api/v1/dashboard/post/webhook' \
--header 'X-API-KEY: your_api_key_here' \
--form 'channel="Twitter"' \
--form 'post_type="thread"' \
--form 'post_content="{
\"0\": {\"text\": \"🚀 The story of how we went from idea to $1M ARR in 18 months (Thread) 🧵\n\nIt wasn'\''t smooth sailing. Here'\''s what we learned along the way...\", \"images\": []},
\"1\": {\"text\": \"Month 1-3: The Reality Check 📉\n\nWe thought we had the perfect product. Customers thought otherwise.\n\n• 2 paying customers\n• $127 MRR\n• Countless sleepless nights\n\nBut this taught us the most important lesson...\", \"images\": []},
\"2\": {\"text\": \"Lesson #1: Fall in love with the problem, not your solution ❤️\n\nWe spent 2 months talking to 100+ potential customers. What we discovered changed everything.\n\nThey didn'\''t want what we built. They needed something completely different.\", \"images\": []},
\"3\": {\"text\": \"Month 4-6: The Pivot 🔄\n\nWe threw away 6 months of code and started fresh.\n\nScary? Absolutely.\nNecessary? 100%.\n\nSometimes the best decision is the hardest one to make.\", \"images\": []},
\"4\": {\"text\": \"The result? 🎯\n\n• Month 6: $2,500 MRR\n• Month 12: $45,000 MRR\n• Month 18: $83,000 MRR\n\nWhat changed? We finally solved a real problem.\n\nWant to know the specific strategies we used? Let me know and I'\''ll share more! 👇\", \"images\": []}
}"' \
--form 'scheduled_at="2025-05-30T14:00:00Z"' \
--form 'status="scheduled"' \
--form 'calendar_uuid="69a1bf45-c48e-46cf-bd53-f47f3efa9763"'
Educational Thread
curl --location 'https://portfolio.tigest.club/api/v1/dashboard/post/webhook' \
--header 'X-API-KEY: your_api_key_here' \
--form 'channel="Twitter"' \
--form 'post_type="thread"' \
--form 'post_content="{
\"0\": {\"text\": \"📚 Understanding API Design Patterns (Thread) 🧵\n\nLet'\''s break down the most important patterns you need to know...\", \"images\": []},
\"1\": {\"text\": \"1. RESTful APIs 🌐\n\n• Resource-based URLs\n• HTTP methods for actions\n• Stateless communication\n• Cacheable responses\n\nWhy it matters: Scalability and simplicity\", \"images\": []},
\"2\": {\"text\": \"2. GraphQL 🎯\n\n• Single endpoint\n• Client-specified queries\n• Strongly typed schema\n• Real-time subscriptions\n\nPerfect for: Complex data requirements\", \"images\": []},
\"3\": {\"text\": \"3. gRPC 🚀\n\n• Protocol Buffers\n• Bi-directional streaming\n• High performance\n• Strong typing\n\nBest for: Microservices communication\", \"images\": []},
\"4\": {\"text\": \"Which pattern should you choose? 🤔\n\nIt depends on:\n• Data complexity\n• Performance needs\n• Team expertise\n• Client requirements\n\nNeed help deciding? Drop your use case below! 👇\", \"images\": []}
}"' \
--form 'scheduled_at="2025-05-30T16:00:00Z"' \
--form 'status="scheduled"' \
--form 'calendar_uuid="69a1bf45-c48e-46cf-bd53-f47f3efa9763"'
Response Format
Successful Response
Status Code: 200 OK
{
"data": {
"id": 1074016,
"uuid": "fbbf3449-edec-4f7d-b800-2703446edee4",
"calendar_uuid": "69a1bf45-c48e-46cf-bd53-f47f3efa9763",
"calendar_user_uuid": "cb3c071c-319a-4dfb-ab0c-538339d18325",
"content": "",
"channel": "Twitter",
"images": [],
"status": "draft",
"scheduled_at": "2025-05-30T21:30:00Z",
"created_at": "2025-05-29T15:22:01.49379665Z",
"is_active": true,
"updated_at": "2025-05-29T15:22:01.49379665Z",
"post_type": "thread",
"post_content": {
"0": {
"text": "First tweet content here...",
"images": []
},
"1": {
"text": "Second tweet content here...",
"images": []
}
},
"metadata": {},
"campaign_uuid": null,
"analytics": {}
},
"success": true
}
Response Fields Explained
Field | Type | Description |
---|---|---|
id | integer | Unique numeric identifier for the thread |
uuid | string | Unique string identifier (use for API references) |
calendar_uuid | string | Links the thread to your content calendar |
calendar_user_uuid | string | Identifies the calendar owner |
content | string | Empty for threads (content is in post_content) |
channel | string | Always “Twitter” for this endpoint |
images | array | Empty array (no images in text-only threads) |
status | string | Current thread status (draft/scheduled/published) |
scheduled_at | string | Scheduled publication time in UTC |
created_at | string | Thread creation timestamp |
is_active | boolean | Whether the thread is active in the system |
updated_at | string | Last modification timestamp |
post_type | string | Always “thread” for this endpoint |
post_content | object | Contains the complete thread structure |
metadata | object | Additional metadata about the thread |
campaign_uuid | string | Associated campaign identifier (if any) |
analytics | object | Thread performance data (populated after publication) |
Error Handling
Thread-Specific Errors
Invalid Thread Structure (Code: 4006)
{
"errors": {
"code": 4006,
"message": "Thread structure is invalid. Please check your post_content format."
},
"success": false
}
Solution: Ensure post_content
is valid JSON with sequential numbered keys starting from “0”.
Thread Too Long (Code: 4008)
{
"errors": {
"code": 4008,
"message": "Thread exceeds maximum length of 25 tweets."
},
"success": false
}
Solution: Reduce thread length to 25 segments or fewer.
Character Limit Exceeded (Code: 4009)
{
"errors": {
"code": 4009,
"message": "Tweet segment exceeds 280 character limit."
},
"success": false
}
Solution: Ensure each tweet segment in your thread is 280 characters or less.
Last updated: May 29, 2025