When you connect a social platform to Siren, we get a token that lets us post on your behalf to that account — and read just enough about it to confirm the post landed. We don't read your DMs. We don't crawl your followers. We don't sell anything we receive. This page lays out exactly what each platform grants us, why we need it, and how to revoke it in two clicks.
What we access, in plain English
Siren posts on your behalf to the social platforms you connect. To do that, every platform asks us to request a specific set of permissions (called "scopes"). We request only the minimum set required to post and confirm the post landed — never any scope tied to private content (DMs, private messages, friend lists), and never any scope tied to ads or audience targeting unless you explicitly enable a feature that needs it.
We store the platform's OAuth token encrypted at rest using AES-256 via Fernet. The encryption key lives in Sage's environment, separate from the database. Tokens never appear in logs, error reports, or analytics. A token is decrypted only at the moment of an authorised post on your behalf, and re-encrypted before it goes back to disk.
X (Twitter)
Scopes requested: tweet.read, tweet.write, users.read, offline.access.
Why each:
tweet.write— to post the tweet you approved in Siren. This is the only "write" scope we touch.tweet.read— to read back the tweet we just posted so we can confirm the URL, the timestamp, and any rate-limit headers X returned. We do not read your timeline or any tweet we didn't post.users.read— to confirm the connected handle matches what you authorised. Used once at connect time and on token refresh.offline.access— so the token persists past the browser session and survives Siren's cron-driven token refresh. Without this, you would have to re-authorise X every two hours.
What we DON'T request: direct messages (dm.read / dm.write), follower lists, mute lists, block lists, or any analytics scope. If a future Siren feature requires a new scope (e.g. reading the post's view count), we'll add it to this page and prompt for re-authorisation — never silently.
Token lifetime: X access tokens expire after 2 hours. Siren refreshes them via the standard OAuth 2.0 refresh flow. Refresh tokens issued under offline.access last 6 months unless revoked. We rotate tokens on each refresh so a leaked old token cannot be replayed.
Revoking: X dashboard → x.com/settings/connected_apps → find Siren → Revoke. Or revoke from inside Siren via Connected Accounts (one click, takes effect immediately on Siren's side; X-side may take a few seconds to propagate).
Meta — Facebook + Instagram
Scopes requested: pages_manage_posts, pages_read_engagement, instagram_basic, instagram_content_publish, business_management.
Why each:
pages_manage_posts— to publish the Facebook Page post you approved.pages_read_engagement— to read back basic engagement counts on posts Siren published, so the dashboard's Performance tab can show "12 likes / 3 shares / 1 comment". We never read comment text or commenter identities.instagram_basic— to confirm the connected Instagram Business Account.instagram_content_publish— to publish the Reel / Feed post / Story you approved.business_management— required by Meta when the Page is connected via a Business Account, so we can resolve which Page-asset the post belongs to. Read-only on assets, never modifies team membership.
What we DON'T request: ads_management, ads_read, read_insights on competitor data, DMs, follower lists, lookalike-audience features, or any Conversions API scope. Siren is purely organic posting; ad spend is your job.
Token lifetime: Meta long-lived Page access tokens do not auto-expire while the connected user remains active and the granted scopes remain in their app settings. We re-fetch the token on every Siren posting attempt and re-encrypt it; if Meta returns an expired-token error, the connected account flips to needs reconnect and the customer is prompted in the dashboard.
Revoking: Meta Business Settings → business.facebook.com/settings/apps → Siren → Remove. Or revoke from inside Siren via Connected Accounts. Personal-Facebook connections (rare; Pages-only is the normal flow) revoke at facebook.com/settings?tab=applications.
YouTube (Google)
Scopes requested: https://www.googleapis.com/auth/youtube.upload, https://www.googleapis.com/auth/youtube.readonly.
Why each:
youtube.upload— to upload the Short you approved as an unlisted or public video on your channel, with the title, description, and tags Siren generated.youtube.readonly— to read back the channel ID, the uploaded video's URL, and basic post-upload status (processing / published / failed). We do not read your subscribers, your watch history, or any analytics scope.
What we DON'T request: youtube.force-ssl beyond what the upload API requires, youtubepartner, content-ID scopes, monetisation scopes, community-post scopes, or any YouTube Analytics scope. Performance data on Siren's dashboard for YouTube is read from each video's public-API counters via the readonly scope — never from your account-level analytics.
Token lifetime: Google access tokens expire after 1 hour. Refresh tokens issued during OAuth do not expire unless you revoke them at myaccount.google.com/permissions. Siren refreshes the access token transparently before each upload.
Revoking: Google Account → Security → Third-party apps with account access → Siren → Remove access. Or revoke from inside Siren via Connected Accounts.
Scopes requested: w_member_social, r_liteprofile, r_emailaddress (the last two only for connection confirmation; never read after the initial OAuth completes).
Why each:
w_member_social— to publish the personal-feed post you approved.- r_liteprofile +
r_emailaddress— to confirm the connected LinkedIn member identity and email at the moment of OAuth, so the dashboard can show "Connected as [email protected]". Read once, never re-fetched.
What we DON'T request: any Marketing Developer Platform scope (r_organization_social, w_organization_social, ads scopes). Siren v1 ships personal-LinkedIn posting only; Company-Page posting requires additional partner status from LinkedIn that we have not yet been granted.
Token lifetime: LinkedIn access tokens last 60 days. Siren prompts for re-authorisation 7 days before expiry. There is no refresh-token flow on the standard OAuth product; re-authorisation is a single click.
Revoking: LinkedIn settings → Permitted services → Siren → Remove. Or revoke from inside Siren via Connected Accounts.
TikTok
Scopes requested: user.info.basic, user.info.profile, video.publish, video.list.
Why each:
video.publish— to publish the video you approved via TikTok's Content Posting API (PULL_FROM_URL). TikTok is video-only; Siren does not post images or text-only updates there.user.info.basic— to confirm the connected TikTok account identity on the Connected Accounts card.user.info.profile— to read the public @handle so the dashboard can show the published permalink after TikTok finishes processing.video.list— to read engagement counts on videos Siren published, so the Performance tab can show views and likes. We do not read your private drafts or other creators' videos.
What we DON'T request: direct messages, follower lists, live scopes, ads or spark-ads scopes, or any research-API scope. Siren posts the video you approved and reads back that video's public counters. Nothing else.
Token lifetime: TikTok access tokens expire after 24 hours. Siren refreshes them via the standard OAuth refresh flow. Refresh tokens last until you revoke the app. If TikTok returns an expired-token error, the connected account flips to needs reconnect.
Revoking: TikTok → Settings → Security → Manage app permissions → Siren → Remove. Or revoke from inside Siren via Connected Accounts.
Revoking access — the two-click path
- Open app.mysiren.ai/app/connected-accounts.
- Click Disconnect on the platform you want to remove. The encrypted token is deleted from Siren's database immediately. Any pending scheduled posts that depended on this token are cancelled.
For belt-and-suspenders, also revoke from the platform's own settings (each per-platform section above links to the right page). Either alone is sufficient to stop Siren posting; both together also clear any cached token at the platform layer.
YouTube API Services notice
Siren's YouTube integration uses YouTube API Services. By using Siren's YouTube features you agree to the YouTube Terms of Service and acknowledge the Google Privacy Policy. You can revoke Siren's access via the standard Google Account permissions page (myaccount.google.com/permissions) or via Connected Accounts inside Siren.
Questions
Email [email protected] for questions about platform disclosures, scope justifications, or revocation. For Meta App Review, YouTube API Services audits, X developer-account reviews, and LinkedIn partnership applications, this page IS the public disclosure URL — point each reviewer here.