TL;DR
- No SDK needed.
requestslibrary + one API key. That’s it. - One base URL, 14+ platforms. Upload media, create posts, pull analytics, handle webhooks.
- Every code example verified against the actual API contracts. Copy-paste and ship.
What You’ll Need
- Python 3.8+ (3.10+ recommended for
matchstatements) requestslibrary -pip install requests- bundle.social API key - get one from the dashboard
Setup: The Client Class
Here’s a client that handles auth, JSON, multipart uploads, and surfaces verbose error details:Teams: Create Workspaces
Teams are isolated workspaces - each team has its own social accounts, posts, and uploads. Think of them as your “client” or “project.”Create a Team
List Teams
One Organization, many Teams. Don’t create separate bundle.social accounts per client. Create Teams programmatically. All billing flows through your single subscription. For the full architecture breakdown, see our Multi-Tenant Architecture Guide.
Connect Social Accounts
Instead of building OAuth flows for 14+ platforms (you really don’t want to), use our hosted portal:redirectUrl. We handle token storage, refresh, and permission scopes.
Upload Media
Two methods. Pick based on file size.Simple Upload (Images & Small Videos)
For anything under 90 MB:Resumable Upload (Large Videos)
For big files. Three steps: init, push bytes, finalize.Create Posts
Every post needs ateamId, a title, a postDate (ISO 8601), a status, the target platforms, and platform-specific data.
Instagram: Reel
TikTok: Video
Multiple Platforms at Once
Each platform gets its own data block with platform-specific fields:Text-Only Posts (No Media)
Facebook: Posts, Reels & Link Shares
Platform-specific fields vary. Instagram has
collaborators (max 3 usernames) and tagged users. TikTok has isAiGenerated and autoAddMusic. Pinterest requires a boardId. Check the Platform Guides for every field per platform.Post Status Values
| Status | When to use |
|---|---|
SCHEDULED | With a future postDate - publishes at that time |
SCHEDULED | With current postDate - publishes immediately |
DRAFT | Save without publishing. Edit and schedule later |
List & Manage Posts
List Posts
Get a Single Post
Delete a Post
Retry a Failed Post
Analytics
Analytics require ateamId and platformType. The response contains an items array - each item is a daily analytics snapshot (refreshed every 24h, retained for 40 days).
Social Account Analytics
Post Analytics
Bulk Post Analytics
Force Refresh
Some metrics return 0. This doesn’t mean zero engagement - it means the platform API doesn’t provide that data point. Twitter/X has no analytics API at all. Each Platform Guide documents exactly which fields return 0.
Webhooks: Signature Verification
Webhooks fire at the organization level. Always verify the HMAC-SHA256 signature in thex-signature header.
Flask
Django
All Webhook Events
| Event | When it fires |
|---|---|
post.published | Post went live on the platform |
post.failed | Post failed after retries |
comment.published | Auto-comment posted |
social-account.created | New social account connected |
social-account.deleted | Account disconnected |
team.created | New team created |
team.updated | Team details changed (including social accounts added/removed) |
team.deleted | Team deleted |
Delivery Details
| Setting | Value |
|---|---|
| Timeout | 15 seconds per delivery |
| Max attempts | 3 (initial + 2 retries) |
| Backoff | Exponential, starting at 30s |
| Auto-disable | After 50 consecutive failures in 24h |
Error Handling
When a post fails on specific platforms, the response includeserrorsVerbose - a per-platform breakdown:
Error Code Prefixes
| Prefix | Platform |
|---|---|
META | Instagram, Facebook, Threads |
TT | TikTok |
LI | |
YT | YouTube |
HTTP | Generic API errors |
The isTransient Field
| Value | Meaning | Action |
|---|---|---|
True | Rate limit, temporary outage, timeout | Retry with exponential backoff |
False | Auth error, content rejected, validation | Fix the input or reconnect the account |
Rate Limiting
Two layers. Both matter.Layer 1: API Rate Limits
| Layer | Window | Max Requests |
|---|---|---|
| Burst | 1 second | 100 |
| Short | 10 seconds | 500 |
| Minute | 1 minute | 2,000 |
429. Implement exponential backoff:
Layer 2: Platform Posting Limits
Daily caps per social account per platform (varies by subscription tier):| Platform | FREE | PRO | BUSINESS |
|---|---|---|---|
| 10/day | 20/day | 25/day | |
| TikTok | 5/day | 10/day | 15/day |
| Twitter/X | 5/day | 15/day | 15/day |
| YouTube | 10/day | 10/day | 15/day |
Automation: Scheduled Posting Script
A practical example usingschedule (pip install schedule):
For production, use a proper scheduler - cron, Celery Beat, APScheduler, or your framework’s task system. The
schedule library is great for scripts and prototypes but doesn’t survive process restarts.Django Integration
Service Class
Settings
URL Config
Platform-Specific Fields Reference
Quick reference for the most commonly used fields. For the full spec, see Platform Guides.| Platform | Key Fields | Notes |
|---|---|---|
type (POST/REEL/STORY), text, uploadIds, shareToFeed, collaborators, tagged | text max 2000 chars. collaborators max 3 usernames | |
| TikTok | type (VIDEO/IMAGE), text, uploadIds, privacy, disableComments, isAiGenerated | text max 2200 chars. IMAGE type: JPG only |
| YouTube | type (SHORT/VIDEO), text (title!), description, uploadIds, privacy, madeForKids | text is the video TITLE (max 100). description max 5000 |
text (required!), uploadIds, privacy, mediaTitle, hideFromFeed | text max 3000 chars. Supports PDF documents | |
| Twitter/X | text, uploadIds | 280 chars (Free/Basic), 25K chars (Premium) |
type (POST/REEL/STORY), text, uploadIds, link | link only for type POST. text max 50K chars | |
text, description, uploadIds, boardName (required!), link | text max 100 chars. boardName from socialAccount.channels | |
sr (required!), text, uploadIds, flairId, link, nsfw | sr format: r/subredditName or u/username. text max 300 chars |
Resources
API Documentation
Full endpoint reference and interactive examples
Platform Guides
Platform-specific fields, limits, and quirks for all 14+ platforms
Platform Limits
File sizes, aspect ratios, durations - per platform
Webhooks
All events, payload examples, and delivery details
Swagger / OpenAPI Spec
Interactive API explorer - test endpoints directly in your browser
Questions? Running into edge cases? Reach out - we’ve debugged enough
requests.exceptions.HTTPError tracebacks to last a lifetime.