API Documentation
RESTful API documentation for developers
https://api.lots.socialAPI Key (Bearer token or X-API-Key header)
37
Authentication
All API requests require authentication using an API key. You can create an API key from your dashboard.
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.lots.social/api/v1/lotssocial/billingaccess
/api/v1/lotssocial/billingGet Billing Status
get_billing_statusShow what LotsSocial costs this person right now: LotsTech Credits balance, which plan (if any) covers how many accounts, how many accounts are paid from credits, the monthly credit spend, and roughly how long the balance lasts. Use it when they ask about credits, cost, billing or whether they can add another account, and after they buy credits to confirm the top-up arrived. Accounts beyond a plan cost credits monthly; posts, media storage, workspaces and brands are free (fair use). Members of someone else's workspace see only whether another account can be added, since the owner pays.
/api/v1/lotssocial/connect-linkGet Connect Link
get_connect_linkCreate a link the person opens in their browser to connect a social account (LinkedIn, Instagram, X and the rest) to LotsSocial, or to reconnect one they already have. Use it whenever they ask to connect, add or link an account, or when list_connected_accounts shows the account they want to post to is missing. To renew an existing account (expired, needs reconnecting, or posts fail with an authorization error) pass its account_id: the link renews that same account in place, keeping its ID, brand, post history and scheduled posts, and adds nothing new. Give them the url and ask them to open it; never open it yourself, because it signs in to their social account. The link works for one hour. A new-account link can connect several accounts; accounts beyond plan coverage are paid from credits automatically, and if the balance cannot cover the account, offer get_credits_link. Afterwards call list_connected_accounts (or get_account_details for a reconnect) to confirm. For an agency client who should connect their own accounts without a LotsSocial login, pass purpose client with a label (the client's name) and usually brand_id: that link lasts up to 7 days (expiry_days), returns link_id, is shown only once and can be listed with list_connect_links and revoked with revoke_connect_link (or on the Accounts page). Only workspace owners, admins and managers can create one.
/api/v1/lotssocial/credits/checkoutGet Credits Link
get_credits_linkCreate a checkout link to buy LotsTech Credits, which pay for connected accounts beyond plan coverage. Use it when the person asks to add credits, or when get_billing_status or get_connect_link shows there are not enough credits for what they want. Ask how much they want to spend if they have not said (minimum $10). Give them the url to pay in their browser; never ask for card details in the chat. Purchased credits never expire. Call get_billing_status afterwards to confirm they arrived.
/api/v1/lotssocial/connect-linksList Connect Links
list_connect_linksList a workspace's connect links, newest first: link_id, label, brand_id, platforms, status (active, expired or revoked), expires_at and accounts_connected. Client links by default; purpose self shows the one-hour links agents created, all shows both. URLs are never shown again after creation. Owners, admins and managers only.
/api/v1/lotssocial/connect-links/:link_idRevoke Connect Link
revoke_connect_linkRevoke a connect link so it no longer opens. Accounts already connected through it stay connected. The link is kept (not deleted) with its history. Owners, admins and managers only.
media
/api/v1/lotssocial/media/metadataUpdate Media Metadata
update_media_metadataUpdate a media asset description, alt text, or tags so people and agents can find and reuse it.
/api/v1/lotssocial/media/uploads/completeComplete Media Upload
complete_media_uploadFinish an upload started with create_media_upload after the file has been PUT to upload_url. Verifies the file, saves it to the media library and returns its media_id for create_social_post or update_social_post. Add a description and alt text so the file can be found and reused.
/api/v1/lotssocial/media/uploadsCreate Media Upload
create_media_uploadStart uploading a video or image file you have locally. Returns a short-lived upload_url: PUT the raw file bytes to it with the given Content-Type header, then call complete_media_upload with the file_key to get a media_id. Use this for every video and for any image you cannot pass as a URL.
research
/api/v1/lotssocial/research/brand-winnersGet Brand Winning Posts
get_brand_winning_postsReturn the brand’s published posts ranked against its median engagement per platform, from saved analytics. Use for requested performance analysis or relevant prior examples. Reports coverage and relative performance; it does not require a research workflow.
strategy
/api/v1/lotssocial/platform-playbookGet Platform Playbook
get_platform_playbookGet versioned, dated platform guidance with official-policy, observed-practice, and experimental evidence kept separate. Agents must obey official rules and treat reach guidance as testable rather than guaranteed.
workspaces
/api/v1/lotssocial/workspaces/:workspace_id/invitationsInvite Workspace Member
invite_workspace_memberInvite someone to a workspace by email as admin, manager, creator or viewer (never owner). Sends the LotsSocial invitation email; the person accepts it signed in with that email address. Owners and admins only. Confirm the email address and role with the person first. Inviting an address with a pending invitation sends it again (at most once a minute). emailSent says whether the email went out.
/api/v1/lotssocial/workspaces/:workspace_id/leaveLeave Workspace
leave_workspaceLeave a workspace you are a member of. The owner cannot leave (the owner deletes the workspace instead). You lose access at once; your posts and media stay in the workspace. Confirm with the person first.
/api/v1/lotssocial/workspaces/:workspace_id/membersList Workspace Members
list_workspace_membersList the members of a workspace: member_id, email, role (owner, admin, manager, creator, viewer), status and joined_at; is_you marks the caller. Owners and admins also get pending_invitations. Any member can call it.
/api/v1/lotssocial/workspaces/:workspace_id/members/:member_idRemove Workspace Member
remove_workspace_memberRemove a member from a workspace. Owners and admins only; the owner cannot be removed. The person loses access at once; their posts and media stay in the workspace. Confirm with the person first.
/api/v1/lotssocial/workspaces/:workspace_id/members/:member_idUpdate Workspace Member
update_workspace_memberChange a member's role to admin, manager, creator or viewer. Workspace owners only. No one can be made owner, and the owner's own role cannot be changed.
General
/api/v1/lotssocial/posts/bulkBulk Create Social Media Posts
bulk_create_social_postsCreate up to 50 drafts or scheduled posts for one shared set of connected accounts. Brand-scoped work must pass brand_id. Reddit and Pinterest need platform_fields (subreddit; board_id and title), batch-wide or per post; media-required platforms need media before scheduling.
/api/v1/lotssocial/workspacesCreate Workspace
create_workspaceCreate a new workspace owned by the person, for example one per business or client they run. Accounts, posts, media and results in different workspaces never mix. Workspaces are free and unlimited. Afterwards, use get_connect_link with the new workspace_id to connect its social accounts.
/api/v1/lotssocial/media/:media_idDelete Media File
delete_mediaPermanently deletes a media file. IMPORTANT: Requires media_id — call list_media first to get the UUID of the media file. Deletion is irreversible.
/api/v1/lotssocial/analyticsGet Aggregate Analytics
get_aggregate_analyticsReturn normalized engagement totals, platform breakdowns, top posts, analytics freshness and follower counts for a workspace, brand, account subset, platform, or date range. Totals cover only posts with analytics; analytics_freshness.posts_without_analytics counts published posts that have none yet or whose network does not share them. summary.avg_engagement_rate counts only posts that reported exposure (impressions, else views, else reach): their engagement over their exposure; summary.engagement_rate_basis says how many posts and which denominators it used, and the rate is null with a reason when none did. audience lists every account in scope with its latest daily follower count, captured_on, followers_change_7d / followers_change_30d (each states the days it covers) or unavailable_reason; it ignores the date range.
/api/v1/lotssocial/media/:media_idGet Media Details
get_media_detailsRetrieves details for a specific media file (image/video). IMPORTANT: Requires media_id — call list_media first to get the UUID of the media file.
/api/v1/lotssocial/brandsList Brands
list_brandsList the brands in a workspace with how many connected accounts each holds. Brands group accounts (for example one company or client); pass a brand_id when posting so only that brand's accounts are used. Create or regroup brands with create_brand and update_brand.
/api/v1/lotssocial/accountsList Connected Accounts
list_connected_accountsList connected social accounts for you, a workspace or one brand: platform, name, connection status, brand, caption_limit (characters this account accepts; X Premium allows 25,000, free X 280) and requires_media (Instagram, YouTube, Pinterest and TikTok need an image or video). Write each caption to its account's caption_limit. When working for a brand, pass brand_id: a workspace can hold several brands' accounts.
/api/v1/lotssocial/mediaList Media Files
list_mediaSearch accessible images and videos by filename, tags, description, or alt text before asking the owner for a new asset.
/api/v1/lotssocial/workspacesList Workspaces
list_workspacesRetrieves all workspaces the authenticated user is a member of. Returns workspace details including name, slug, type, owner, and the user role and join date for each workspace. Automatically checks subscription status.
/api/v1/lotssocial/workspaces/:workspace_idUpdate Workspace
update_workspaceRename a workspace or change its description or logo. Owners and admins only. Manage its members with list_workspace_members, invite_workspace_member, update_workspace_member and remove_workspace_member. Deleting a workspace is done in the LotsSocial app.
/api/v1/lotssocial/mediaUpload Media
upload_mediaStore an image or video in the LotsSocial media library from a public link (url), or an image from base64, and return its media_id and public URL. Videos (MP4, MOV, WebM up to 200 MB) are streamed from the link. For a file on your computer, use create_media_upload and complete_media_upload instead. Add a description and alt text so the asset can be found and reused.
posts
/api/v1/lotssocial/posts/:post_id/cancelCancel Scheduled Post
cancel_scheduled_postCancel a scheduled post and return it to draft. Use list_social_posts with type=scheduled to find the post UUID.
/api/v1/lotssocial/postsCreate Social Media Post
create_social_postCreate one post for selected connected accounts: a draft, scheduled (scheduled_time), or published right away (publish_now: true, only after the person confirms). Use platform_captions for account-specific copy and platform_fields for Reddit (subreddit, title, flair), Pinterest (board_id, title, link) and TikTok on our own app (send_as_draft). Brand-scoped work must pass brand_id. Scheduling and publishing now run every network rule (validate_social_post is the dry run); drafts may stay incomplete. publish_now returns accounts[] with each account's status; get_social_post shows the final results. A draft for TikTok on our own app returns review_url, where the person approves it.
/api/v1/lotssocial/posts/:post_idDelete Social Post
delete_social_postPermanently delete a draft or scheduled post from LotsSocial. Published posts cannot be deleted: LotsSocial cannot remove a post from the network, so the refusal returns each network's live link for the person to open and delete it there while signed in. Creators can delete only their own drafts; owners and admins can delete any draft or scheduled post in their workspace. Managers cannot delete posts.
/api/v1/lotssocial/posts/:post_id/analyticsGet Post Analytics
get_post_analyticsReturn engagement analytics for one published post, per network. Use list_social_posts with type=posted to find the post UUID. A network entry with analytics_available=false has no data yet (or the network does not share it) and gives a reason: report that reason, never as zero engagement.
/api/v1/lotssocial/posts/:post_idGet Social Post Details
get_social_postRetrieves complete details for a single social post including all media files, platform logs, connected accounts, publishing status, and edit history. Enforces role-based access control - creators can only access their own posts unless they have manager/admin permissions.
/api/v1/lotssocial/postsList Social Posts
list_social_postsList draft, scheduled, or published posts with platform, media, creator, workspace, and optional brand filtering.
/api/v1/lotssocial/posts/:post_idUpdate Social Post
update_social_postUpdate an existing draft or scheduled post, or publish it right away with publish_now: true (only after the person confirms). Supports account-specific captions, Reddit and Pinterest platform_fields (merged over the saved ones), and replacement platform/media selections; preserves existing attribution and fields not changed by the request. publish_now runs every network rule and returns accounts[] with each account's status; get_social_post shows the final results.
/api/v1/lotssocial/posts/validateValidate Social Post
validate_social_postCheck a post against every network rule without saving it: caption and title limits, required media and fields, file count, format, size, aspect ratio, video length, transparency and animation, per account. Takes the same input as create_social_post (or post_id to check an update, or posts plus platforms for a bulk batch). Returns valid, errors (block scheduling), warnings (a draft can keep them) and notices (files LotsSocial will convert), each with account_id, media_id and the sentence the dashboard shows. Fix the errors before scheduling.
billing
/api/v1/lotssocial/fundingCheck product funding
get_funding_statusCheck plan coverage, credit funding and current capacity rates. Plan coverage is used first; capacity beyond it is paid from the owner's credits automatically, charged daily (free credits first, then plan credits, then purchased). If credits run low, give the returned settings_url so the owner can top up or choose a plan.
accounts
/api/v1/lotssocial/accounts/:account_idDisconnect Account
disconnect_accountDisconnect a connected social account from LotsSocial so it stops counting toward daily account charges. Use only when the person asks to remove that account. Its LotsSocial post history and analytics are removed with it; posts already on the network stay live there. Refused while the account is in a scheduled post: cancel or edit those posts first. Reconnect later with get_connect_link.
/api/v1/lotssocial/accounts/:account_idGet Account Details
get_account_detailsGet one connected account's profile, follower count, connection health (active, expiring or needs reconnect, with the last error) and posting record. account.audience has the latest daily follower count (subscribers on YouTube) with captured_on and followers_change_7d / followers_change_30d; each change states the days it actually covers, which is shorter while tracking is new. Networks without counts return unavailable_reason, never 0. Reddit and Pinterest accounts carry posting_fields: what to pass in platform_fields, and for Pinterest the account's boards (board IDs). Use it when posts to the account fail or the person asks about it; if it needs reconnecting, call get_connect_link with account.reconnect.arguments (this account_id) and give them the link: it renews this same account in place.