Command-line interface

Your social workspace, scriptable from the terminal

The Styrar CLI puts every workspace action — posts, links, bio pages, campaigns, analytics — behind a single `styrar` command. Sign in to your dashboard to get your API key and the CLI. Every command is generated straight from the same tool catalog the Styrar MCP server exposes to AI assistants, so a script you write today behaves exactly like the equivalent AI action.

See all integrations

What you can run

A few of the generated commands:

  • `styrar list-posts` — list scheduled, published, and draft posts with filters
  • `styrar create-post` — draft or schedule a post across every connected platform
  • `styrar get-link-analytics` — pull click data and campaign performance for a date range
  • `styrar create-link` / `styrar list-links` — create and manage short links and campaigns
  • `styrar list-social-accounts` — list connected accounts and their status
  • `styrar search` — search posts, links, campaigns, and bio pages from one query
  • `styrar api GET /v1/...` — call any Styrar endpoint directly, even ones without a dedicated command

The full command collection

Every command below runs in your terminal — organized by category, generated from the same catalog as the Styrar MCP server.

147commands across 12 categories
Links & social accounts29
  • styrar list-social-accountsList connected Instagram, X (Twitter), TikTok, LinkedIn, YouTube, Threads, Facebook, and other social accounts. Optional companyId for company scope.
  • styrar create-linkCreate a shortened URL with optional title, shortCode, company scope, expiresAt, activeFrom, campaignIds, linkGroupId, tagIds, customDomainId, qrStyle, and custom OG fields (ogTitle, ogDescription, ogImageUrl, ogInterstitialEnabled).
  • styrar list-linksList shortened URLs; filter by companyId, campaignId, linkGroupId, tagId, or unassigned (no campaign).
  • styrar get-linkFetch a single short link by linkId including click count and campaign metadata.
  • styrar update-linkUpdate a short link: originalUrl, title, isActive, activeFrom, expiresAt, campaignId/campaignIds, linkGroupId, tagIds, qrStyle, and custom OG fields.
  • styrar delete-linkPermanently delete a short link by linkId.
  • styrar list-link-groupsList link groups (folders) for personal or company scope.
  • styrar create-link-groupCreate a link group/folder with title and optional companyId or campaignId.
  • styrar update-link-groupRename a link group by groupId.
  • styrar delete-link-groupDelete a link group; links in the folder become unassigned.
  • styrar list-link-tagsList tags used to label short links in personal or company scope.
  • styrar create-link-tagCreate a link tag by name in personal or company scope.
  • styrar update-link-tagRename a link tag by tagId.
  • styrar delete-link-tagDelete a link tag and remove it from assigned links.
  • styrar list-link-routing-rulesList geo/device routing rules that redirect visitors to alternate destination URLs.
  • styrar create-link-routing-ruleAdd a geo or device rule mapping conditions to an HTTPS destinationUrl.
  • styrar update-link-routing-ruleUpdate priority, conditions, destination URL, or active state on a link routing rule.
  • styrar delete-link-routing-ruleRemove a geo/device routing rule from a short link.
  • styrar get-link-experimentFetch the A/B experiment on a short link (variants, weights, status, click counts).
  • styrar update-link-experimentCreate or replace a draft link experiment with HTTPS destinationUrl variants and weights.
  • styrar delete-link-experimentRemove the A/B experiment configuration from a short link.
  • styrar control-link-experimentStart, pause, or complete a link A/B experiment. Pass winningVariantId when completing.
  • styrar bulk-create-linksCreate up to 100 links from a links array or CSV string. Set upsert true for idempotent shortCode imports.
  • styrar bulk-update-linksUpdate up to 100 links in one request via an updates array (each entry needs id).
  • styrar bulk-delete-linksDelete multiple short links by linkIds in personal or company scope.
  • styrar import-link-ogScrape og:title, og:description, and og:image from the link destination URL into custom OG fields.
  • styrar get-link-qrReturn short link QR metadata (shortCode, qrStyle). Binary PNG/SVG download uses the dashboard or GET /v1/links/:id/qr.
  • styrar get-link-analyticsAggregated click counts across all short links; optional companyId and date range (from, to).
  • styrar get-link-analytics-by-idClick analytics for a single linkId; optional date range (from, to).
Posts9
  • styrar create-postCreate a DRAFT or SCHEDULED social post across Instagram, LinkedIn, X, TikTok, YouTube, and more. Use scheduledAt to schedule—no separate schedule_post tool. Call list_social_accounts first for socialAccountId in each target.
  • styrar list-postsList posts with optional filters—status (DRAFT, SCHEDULED, PUBLISHED, FAILED), companyId, date range (from, to), page, limit.
  • styrar get-postFetch a single post by postId including platform targets, approval status, media files, and analytics.
  • styrar update-postUpdate a DRAFT or SCHEDULED post by postId. Editable fields: content, title, scheduledAt, status, campaignId, brandId, tags, mediaFileIds.
  • styrar delete-postPermanently delete a post by postId (must be DRAFT, SCHEDULED, or FAILED).
  • styrar list-saved-mentionsList workspace saved @mentions with per-platform handles for compose and publish substitution.
  • styrar create-saved-mentionCreate or upsert a saved @mention with optional per-platform handles (X, LinkedIn, etc.).
  • styrar update-saved-mentionUpdate a saved mention name or platformHandles by mentionId.
  • styrar delete-saved-mentionDelete a workspace saved mention by mentionId.
Bio pages54
  • styrar list-bio-pagesList bio pages for personal or company scope; includes live version and custom domain metadata.
  • styrar get-bio-pageFetch one bio page by id, including live blocks and custom domain details.
  • styrar create-bio-pageCreate a new bio page with title and optional company scope.
  • styrar update-bio-pageUpdate bio page settings: title, custom tenantSlug, allowCustomSlug, trackingConfig (GA/GTM/pixels), and cookiePolicy banner when tracking is enabled.
  • styrar delete-bio-pageDelete a bio page and linked sentinel click-tracking link.
  • styrar list-bio-versionsList versions for a specific bio page id.
  • styrar create-bio-versionSave a new bio page version draft with theme, pages, pageMeta, and chrome blocks. Set copyFromSource true to clone the latest locale version.
  • styrar delete-bio-versionDelete a saved bio version. Cannot delete the only version on a page.
  • styrar publish-bio-versionPublish a specific version id as the live bio page.
  • styrar get-bio-blocksList blocks for a bio page version, optionally filtered by pagePath.
  • styrar replace-bio-blocksReplace chrome blocks for a bio version (hero, nav, footer). For section content use update_bio_version.
  • styrar get-bio-versionFetch a bio version with theme, pages, pageMeta sections, and chrome blocks. Omit versionId for the latest locale draft.
  • styrar update-bio-versionSave a bio draft in place with theme, pages, pageMeta (sections), and chrome blocks. Use for layout and content edits.
  • styrar get-bio-experimentFetch the A/B experiment config for a bio page (variants, scope, status, click counts).
  • styrar update-bio-experimentCreate or replace a draft bio experiment with variants (bioPageVersionId + weight). Scope: page, section, or block.
  • styrar delete-bio-experimentRemove the A/B experiment configuration from a bio page.
  • styrar control-bio-experimentStart, pause, or complete a bio A/B experiment. Pass winningVariantId when completing.
  • styrar list-bio-routing-rulesList geo/device routing rules that serve alternate bio versions to visitors.
  • styrar create-bio-routing-ruleAdd a geo or device routing rule mapping conditions to a bioPageVersionId.
  • styrar update-bio-routing-ruleUpdate priority, conditions, target version, or active state on a bio routing rule.
  • styrar delete-bio-routing-ruleRemove a geo/device routing rule from a bio page.
  • styrar get-bio-domainFetch the custom domain attached to a bio page (company workspaces only).
  • styrar set-bio-domainAttach a custom hostname to a bio page. Returns DNS records to configure.
  • styrar verify-bio-domainRe-check Cloudflare verification status for a bio page custom domain.
  • styrar delete-bio-domainDetach and delete the custom domain from a bio page.
  • styrar list-bio-blog-categoriesList blog categories for a bio page, optionally filtered by locale.
  • styrar create-bio-blog-categoryCreate a blog category on a bio page with name, locale, and optional slug.
  • styrar update-bio-blog-categoryUpdate a bio blog category name or slug.
  • styrar delete-bio-blog-categoryDelete a bio blog category.
  • styrar list-bio-blog-postsList blog posts on a bio page; filter by locale, status, or categoryId.
  • styrar get-bio-blog-postFetch one bio blog post by id.
  • styrar create-bio-blog-postCreate a bio blog post with title, HTML content, excerpt, cover image, SEO fields, and DRAFT or PUBLISHED status.
  • styrar update-bio-blog-postUpdate bio blog post content, metadata, category, slug, or publish status.
  • styrar delete-bio-blog-postDelete a bio blog post.
  • styrar get-bio-booking-settingsFetch appointment booking settings for a bio page: timezone, notice windows, deposit processor (Stripe or Shopify), calendar sync, and notification email.
  • styrar update-bio-booking-settingsConfigure bio booking: IANA timezone, notifyEmail, minNoticeMinutes, maxAdvanceDays, depositProcessor with stripeConnectAccountId or shopifyStoreId, and optional calendar sync fields.
  • styrar list-bio-booking-servicesList bookable services on a bio page with duration, buffer, capacity, custom fields, and optional deposit amounts.
  • styrar get-bio-booking-serviceFetch one bio booking service by bioPageId and serviceId.
  • styrar create-bio-booking-serviceAdd a bookable service with name, durationMinutes, optional description, buffer, capacity, custom intake fields, and optional depositAmountCents.
  • styrar update-bio-booking-serviceUpdate service name, duration, deposits, custom fields, active state, or sort order.
  • styrar delete-bio-booking-serviceRemove a bookable service from a bio page.
  • styrar list-bio-booking-availability-rulesList weekly hours and date-override availability or blackout rules for bio booking.
  • styrar create-bio-booking-availability-ruleAdd weekly hours or a date_override rule. Use ruleType weekly with weekday 0-6, or date_override with YYYY-MM-DD. Set isBlackout for blocked days.
  • styrar update-bio-booking-availability-ruleUpdate startMinute/endMinute, blackout flag, or date on an availability rule.
  • styrar delete-bio-booking-availability-ruleRemove a weekly or date-override availability rule.
  • styrar list-bio-booking-appointmentsList upcoming or past appointments for a bio page with optional limit and cursor pagination.
  • styrar get-bio-booking-appointmentFetch one appointment with service, slot times, guest details, and status.
  • styrar update-bio-booking-appointmentMark a confirmed past appointment as no_show via action no_show.
  • styrar cancel-bio-booking-appointmentCancel a confirmed appointment and notify the guest when configured.
  • styrar list-bio-theme-presetsList workspace-saved custom bio theme presets for personal or company scope.
  • styrar create-bio-theme-presetSave a reusable bio theme preset with label and theme JSON for the active workspace.
  • styrar delete-bio-theme-presetDelete a saved custom bio theme preset by presetId.
  • styrar get-bio-analyticsFetch click analytics for a bio page id with optional from/to date range.
  • styrar get-workspace-bio-analyticsOverview analytics across all bio pages in personal or company scope.
Campaigns5
  • styrar list-campaignsList campaigns for personal or company scope with optional brand and click totals filters.
  • styrar get-campaignFetch one campaign by id including counts and brand metadata.
  • styrar create-campaignCreate a campaign with name and optional company, brand, destination, UTM, and dynamic link settings.
  • styrar update-campaignUpdate a campaign by campaignId. Editable fields: name, description, defaultDestinationUrl, dynamicSourceEnabled, dynamicLinkMode, utmDefaults, brandId.
  • styrar delete-campaignPermanently delete a campaign by campaignId.
Content planning8
  • styrar get-content-planning-boardFetch the company content pipeline board and work items. Use view kanban for /content/plan column order, list for /content/list sorting, or timeline for /content/timeline due-date ranges. Requires company workspace and contentPlanning feature flag. Filters: campaignId, brandId, stage slug/id, tag, assigneeUserId, type (POST|LINK|BIO_UPDATE), q. Timeline view accepts optional from/to ISO dates (defaults to current month through two months ahead).
  • styrar create-content-work-itemAdd a card to the content planning pipeline (Kanban). Requires companyId. Optional stageId, type (POST|LINK|BIO_UPDATE), title, description, campaignId, brandId, assigneeUserId, startDate, endDate, dueDate, linked postId/linkId/bioPageId, and tags.
  • styrar update-content-work-itemUpdate a planning card by workItemId and companyId. Editable fields match create_content_work_item plus stageId and position.
  • styrar delete-content-work-itemPermanently delete a planning card by workItemId and companyId.
  • styrar move-content-work-itemMove a planning card to another pipeline stage (Kanban column). Requires workItemId, companyId, stageId; optional position within the column.
  • styrar add-content-work-item-tagAdd a tag label to a planning card. Requires workItemId, companyId, and tag.
  • styrar remove-content-work-item-tagRemove a tag from a planning card. Requires workItemId, companyId, and tag.
  • styrar reorder-content-planning-stagesReorder or rename Kanban pipeline stages. Requires content_planning:admin. Pass companyId, boardId, and stages array with id plus optional position and name.
Automations8
  • styrar list-automationsList automation flows for personal or company scope.
  • styrar get-automationFetch one automation by id including recent runs and nodes.
  • styrar create-automationCreate an automation with name and optional description or company scope.
  • styrar update-automationUpdate automation fields such as name, description, status, or viewport coordinates.
  • styrar list-automation-runsList run history for a specific automation id.
  • styrar run-automationTrigger a manual run for an automation with optional input payload.
  • styrar create-automation-nodeAdd a step to an automation (kind, label, x, y required) with optional visual and config fields.
  • styrar create-automation-edgeConnect two automation steps with a link between them.
Approval flows7
  • styrar list-approval-flowsList approval flows for a company (companyId required).
  • styrar get-approval-flowFetch one approval flow by id including nodes and edges.
  • styrar create-approval-flowCreate a company approval flow with name, optional description, and optional default flag.
  • styrar update-approval-flowUpdate approval flow fields such as name, description, status, and default flag.
  • styrar delete-approval-flowDelete an approval flow by id.
  • styrar test-approval-flowSimulate a flow test run with optional dummy post fields and get step and notification results.
  • styrar post-approval-actionPerform post approval actions (approve, reject, request_changes, reassign, override) on post tasks.
AI skill documents6
  • styrar list-skill-documentsList Markdown skill documents for the current user or a specific brand (provide both companyId and brandId for brand scope). Returns id, slug, title, sortOrder.
  • styrar get-skill-documentFetch a single skill document by id, including the full Markdown body. Optionally scope to a brand with companyId + brandId.
  • styrar create-skill-documentCreate a new Markdown skill document for the user or a brand (provide both companyId and brandId for brand scope). Use list_skill_templates to get ready-made starting content.
  • styrar update-skill-documentUpdate an existing skill document's title, Markdown body, slug, or sortOrder by id.
  • styrar delete-skill-documentDelete a skill document by id. Optionally scope to a brand with companyId + brandId.
  • styrar list-skill-templatesList ready-made Markdown templates — brand voice, Instagram strategy, LinkedIn strategy, content calendar, campaign planner, and hashtag strategy. Copy a template body into create_skill_document to add it to a workspace.
Media library6
  • styrar upload-mediaStore an image in the media library by passing its content as a base64-encoded string (fileData). Requires fileName and mimeType (must be image/*). The file is stored securely in S3 and automatically processed. Returns the stored file id and a signed view URL. Use when the user sends an image directly in the conversation.
  • styrar upload-media-from-urlFetch a public image URL and store it in the media library. Requires url (must resolve to an image). Optional fileName and companyId. Returns the stored file id and a signed view URL.
  • styrar generate-imageGenerate a new image from a text prompt and save it to the media library. Requires prompt. Optional fileName, companyId, provider (openai or gemini), and size (1024x1024, 1536x1024, or 1024x1536). Returns the stored file id and signed viewUrl.
  • styrar list-mediaReturns the 25 most recent images and videos from the media library as an interactive picker with inline previews. Images are shown directly; videos are shown with their thumbnail frame. Each item includes fileName, id, mimeType, sizeBytes, and duration (for videos). Call this whenever the user needs to choose a media file. Optional filters: companyId, q (filename search), tag, page.
  • styrar get-mediaFetch a single library file by id, including a signed view URL and processing status.
  • styrar delete-mediaPermanently delete a library file by id. The file is removed from S3 and the account.
Companies & brands9
  • styrar list-companiesList all companies the authenticated user belongs to, with role and member counts. Call this first to discover available companyId values.
  • styrar get-companyFetch a single company by id including brand count, member count, and subscription plan.
  • styrar create-companyCreate a new company workspace with a name and unique slug. The authenticated user becomes the owner.
  • styrar update-companyUpdate a company's name or other profile fields by companyId.
  • styrar list-brandsList all brands for a company by companyId. Returns id, name, slug, isArchived, and logo. Call before scoping posts, campaigns, or skill documents to a brand.
  • styrar get-brandFetch a single brand by companyId and brandId including guidelines and logo.
  • styrar create-brandCreate a new brand inside a company by companyId. Requires a name; slug is auto-derived.
  • styrar update-brandUpdate a brand's name, guidelines, or archive status by companyId and brandId.
  • styrar list-company-membersList members of a company by companyId. Returns user name, email, role, and brand access. Useful for approval flow setup.
Workspace notes5
  • styrar list-notesList workspace notes for personal or company scope. Optional companyId to filter to a company workspace.
  • styrar get-noteFetch a single workspace note by noteId including full body text.
  • styrar create-noteCreate a markdown workspace note with title and body. Optional companyId and visibility (PRIVATE or COMPANY).
  • styrar update-noteUpdate a workspace note's title, body, or visibility by noteId.
  • styrar delete-notePermanently delete a workspace note by noteId.
Search1
  • styrar searchGlobal search across posts, links, campaigns, bio pages, and notes. Returns matched items with type labels. Use for broad 'find me something' queries.

Getting started

Sign in to get set up

  1. Sign in to your Styrar dashboard and create an API key under Settings → API Keys.
  2. The CLI is available to signed-in Team and Agency workspaces — open your account to get it and the current setup instructions for your platform.
  3. Run `styrar login`, paste your key, and set a default workspace with `styrar config set companyId <id>`.
  4. Run `styrar list-tools` to see every available command, or `styrar <command> --help` for its options.
styrar login
styrar config set companyId <id>
styrar list-tools

Why teams script Styrar with the CLI

One command per workspace action

`list-links`, `create-post`, `get-link-analytics`, and more — every Styrar capability is a typed, documented `styrar` command with its own `--help`.

Built for automation and CI

Pipe JSON output into `jq`, wire it into a cron job, a release pipeline, or a bulk-import script. Every command prints clean JSON to stdout.

Same catalog as the MCP server

The CLI is generated from the identical tool definitions Styrar's MCP server exposes to AI assistants, so scripts, AI agents, and the dashboard all stay in sync automatically.

Scoped, revocable API keys

Authenticate with a dashboard API key you control and can revoke at any time. Set a default company and brand once, then use `styrar` across your whole workspace.

Get set up in a couple of minutes

The Styrar CLI authenticates with the same API keys as the Styrar API and MCP server. Sign in to your dashboard, generate a key, log in from your terminal, and you're ready to run commands.

  • Sign in and grab an API keyCreate a key in Settings → API Keys once you're signed in to your Styrar dashboard.
  • Log in from your terminalRun `styrar login`, paste the key, and it's saved locally for every future command.
  • Set your defaultsRun `styrar config set companyId <id>` so you don't have to pass `--company-id` on every call.

What you can script

The Styrar CLI exposes a complete set of commands covering the core social OS workflow, with the same guardrails as the dashboard.

  • Schedule and draft postsCreate a scheduled or draft post for one or more platforms from a single command, ready to wire into a release script.
  • Pull analytics and performance dataRetrieve link clicks, campaign performance, and bio analytics for any date range as clean JSON.
  • Create and manage short linksGenerate branded short links, look up click analytics, and organize links into campaigns from the terminal.
  • Query connected accountsList your connected social accounts or check which platforms are active on the current workspace.
  • Call any endpoint directly`styrar api <method> <path>` reaches any Styrar API route, even ones without a dedicated command yet.

Built for

Developers and agencies

Script repeatable workspace tasks, wire Styrar into a release pipeline, or manage multiple client workspaces from one terminal.

Marketing operations

Bulk-import links, batch-schedule posts, or export analytics into a report — without clicking through the dashboard by hand.

AI and automation builders

Use the same commands your AI agent calls over MCP directly in a shell script, so behavior stays predictable and easy to debug.

Related solutions

CLI FAQs

How do I get the Styrar CLI?

Sign in to your Styrar dashboard — the CLI and current setup instructions for your platform are available to signed-in Team and Agency workspaces.

How does the CLI authenticate?

The CLI uses the same dashboard API keys as the Styrar REST API and MCP server. Generate a key under Settings → API Keys, then run `styrar login` and paste it in — it's saved locally for future commands.

Is the CLI the same as the Styrar MCP server?

They share the same underlying tool catalog, so the same actions are available in both, with identical validation and request behavior. The MCP server is for AI assistants like Claude and Cursor; the CLI is for scripts, terminals, and CI pipelines.

Can I use the CLI in a CI pipeline or cron job?

Yes. Every command authenticates with an API key (via flag, environment variable, or saved config) and prints JSON to stdout, so it's straightforward to call from a script, a scheduled job, or a CI step.

Does the CLI bypass approval workflows or permissions?

No. CLI actions run through the same permission rails and approval flows as the dashboard and API. Your API key's scopes and your workspace role determine what a command is allowed to do.

What can I do with the CLI today?

The CLI covers the full Styrar workspace: posts, short links, bio pages, campaigns, automations, approval flows, media, notes, and search — plus a raw `styrar api` command for any endpoint without a dedicated command yet.

Bring Styrar into your terminal

Sign in, grab an API key, and start scripting your workspace in minutes.

View pricing

Join the beta waitlist

By signing up you agree to receive marketing email. See our Privacy Policy.