# SpecialX > SpecialX is an AI-native work environment: generate images, video, and audio, build and deploy apps on your own {subdomain}.specialx.ai, connect hundreds of external services, and publish to social — all driven by an agent. Every capability is an agent-native action exposed over MCP, a REST API, and a CLI. ## Use SpecialX programmatically - [MCP endpoint](https://specialx.ai/api/mcp): connect any MCP client (Claude, Cursor, …) - [REST actions API](https://specialx.ai/api/v1/actions): list + invoke actions (Bearer sx_… key) - [Developer docs](https://specialx.ai/developers): API keys, MCP setup, examples ## Product - [Image](https://specialx.ai/image): AI image generation (multiple frontier models) - [Video](https://specialx.ai/video): AI video generation - [Sketch](https://specialx.ai/sketch): draw-to-image in real time - [Social](https://specialx.ai/social): connect + publish to social platforms - [Apps](https://specialx.ai/apps): create + deploy apps at {subdomain}.specialx.ai - [Domains](https://specialx.ai/domains): buy + connect custom domains with credits - [Actions](https://specialx.ai/actions): browse every agent action - [Integrations](https://specialx.ai/integrations): connect Gmail, Notion, GitHub, Slack and more - [Supercomputer](https://specialx.ai/supercomputer): the agent workspace (runs code, media, deploys) - [Workflows](https://specialx.ai/workflows): chain steps into automated pipelines - [Earn](https://specialx.ai/earn): referral program — signup bounty + 30% subscription share - [Pricing](https://specialx.ai/pricing): plans + credits ## Agent actions (142) Every action below is callable over MCP, the REST API, and the `specialx` CLI. Tier: `free` (no charge), `credits` (spends account credits), `confirm` (real money / irreversible — must be confirmed). ### apps - **create_app** (free) — Provision an app at https://{subdomain}.specialx.ai. runtime 'template' (default) creates an instant, no-build store/course/quiz on the shared renderer — identical to create_store… - **list_apps** (free) — List the caller's apps with type, runtime, and live url. Use the returned app_id with deploy_app and upload_app_source. - **upload_app_source** (free) — Returns a presigned PUT url to IMPORT a code app's SOURCE zip — a Vite/SPA project (package.json + index.html + src/) for runtime 'static', or a Worker project (package.json + src… - **get_app_source** (free) — Get a presigned GET url for a code app's CANONICAL current SOURCE, zipped — the plain-file workspace source (app-sources/{app_id}/, what supercomputer edits write) when it exists,… - **add_domain** (free) — Attach a real custom domain (e.g. acme.com) to one of your apps so it serves on that domain in addition to {app_id}.specialx.ai. Both owned and external domains route via a Cloudf… - **remove_domain** (free) — Detach a custom domain from one of your apps — the mirror of add_domain: removes it from the app's routing registry and deletes its Cloudflare-for-SaaS custom hostname (the TLS/ed… - **list_app_versions** (free) — List a code app's saved SOURCE snapshots, newest first. Versions are captured automatically: on every successful deploy_app (marked deployed:true), at most daily when workspace ed… - **restore_app_version** (free) — Roll a code app's SOURCE back to a saved snapshot (ids from list_app_versions). The current source is snapshotted first as a 'pre-restore' version, so a restore is always undoable… - **screenshot_preview** (free) — SEE the app you are editing: capture a real browser screenshot of this thread's live dev preview (the same preview panel the user watches) and get it back as an inline image plus… - **deploy_app** (credits) — Build and PUBLISH a code app ('static' or 'worker'). Builds the app's latest source in the sandbox (npm install + npm run build) — the plain-file workspace source when the app has… ### billing - **billing_status** (free) — Report the caller's subscription plan, status, and credit balance. `can_generate` is true on any paid plan, or on the free plan when the user holds purchased credits (a bought cre… - **get_checkout_link** (free) — Mint a Stripe Checkout link the user opens in a browser to subscribe to a plan or buy a one-time credit pack — no need to leave the terminal. Pass `plan` (basic|pro|ultimate|creat… ### comms - **list_channels** (free) — List the Comms channels you belong to. Pass team_id to also discover public channels in that team you could join. - **list_team_members** (free) — List the other members of a team you belong to, with their usernames. Use the returned user_id with open_dm or add_member. Returns nothing for a team you are not in. - **create_channel** (free) — Create a channel in a team you belong to. kind defaults to public. Returns the new channel_id. - **create_tenant_channel** (free) — Create a private channel you own as a developer — not tied to any team. Use it to build your own communication channels and mint realtime tokens for your own end-users via POST /a… - **list_tenant_channels** (free) — List the tenant channels you own as a developer — the ones you create with create_tenant_channel, outside any team. - **join_channel** (free) — Join a public channel in a team you belong to. Idempotent. Private/DM channels are invite only. - **open_dm** (free) — Find-or-create the 1:1 direct message channel between you and another user. Idempotent — returns the same channel_id every time. Use post_message with the returned channel_id to s… - **dm** (free) — Open the 1:1 DM with a user (creating it if needed) and post a message to it in one step. Returns the channel_id, message_id and seq. - **create_group_dm** (free) — Find-or-create a group direct message with 2 or more other users (you are added automatically). Idempotent for the same set of people. Returns the channel_id. - **list_dms** (free) — List your direct message and group DM conversations, newest activity first. Each shows the other participants and an unread count. - **post_message** (free) — Post a message to a channel you belong to. Optionally reply in a thread (thread_parent_id) or dedupe with client_msg_id. Returns message_id and seq. - **read_channel** (free) — Read recent messages from a channel you belong to, newest-first. Page backwards with before_seq. - **search_messages** (free) — Full-text search across the channels you belong to. Pass channel_id to search a single channel you belong to. Returns matching messages newest-first; never searches channels you a… - **read_thread** (free) — Read a thread you can access: the parent message and its replies, oldest-first. Authz: you must belong to the parent's channel. - **edit_message** (free) — Edit a message you authored. Only the author can edit. - **delete_message** (free) — Delete a message you authored, or any message if you are a channel admin/owner. - **react** (free) — React to a message in a channel you belong to. Idempotent. - **unreact** (free) — Remove your reaction from a message. Idempotent. - **mark_read** (free) — Advance your read cursor in a channel you belong to up to up_to_seq. Never moves backwards; clears the unread count. - **leave_channel** (free) — Leave a channel — removes your membership. Idempotent. - **archive_channel** (free) — Archive a channel (admins/owners only). It disappears from everyone’s channel list. - **set_topic** (free) — Set the topic of a channel you administer (admin/owner only). - **add_member** (free) — Add another user to a channel you administer (admin/owner only) — distinct from join_channel, which adds yourself. Idempotent. - **list_notifications** (free) — List your Comms notifications, newest-first. unread_only limits to unread. Each has a kind (message/mention/dm/thread_reply/keyword), the channel_id, the actor, and whether it is… - **mark_notifications_read** (free) — Mark your notifications read. Pass ids to mark specific ones; omit ids to mark ALL your unread as read. Returns how many were updated. - **set_notif_pref** (free) — Set YOUR notification preference for a channel you belong to: 'all' (every message), 'mentions' (only @-mentions and DMs), or 'muted' (nothing). Self-scoped — only ever changes yo… - **create_incoming_webhook** (free) — Mint an incoming webhook URL that posts to a channel you administer (admin/owner only). Returns the URL and secret ONCE — store the secret now, it is never shown again. POST { tex… - **rename_channel** (free) — Rename a channel (admins/owners only). Names must be unique within the team. - **delete_channel** (free) — Permanently delete a channel and all its messages (OWNER only). Distinct from archive — this cannot be undone. - **set_channel_role** (free) — Promote or demote a channel member. Only the owner can grant 'admin' or change an admin's role; the owner's own role can't be changed. - **remove_channel_member** (free) — Remove a member from a channel (admins/owners only). The owner can't be removed; only the owner can remove an admin. - **set_retention** (free) — Set a channel message-retention window in days (admins/owners only). Pass days=0 or omit to keep messages forever. Purging is manual (see purge_expired). - **purge_expired** (free) — Soft-delete messages older than the channel's retention window (admins/owners only). Manual trigger — there is no automated purge. - **export_channel** (free) — Export a channel to a downloadable JSON file — metadata, members, all messages, reactions and pins (admins/owners only). Returns a download URL. - **create_bot** (free) — Create a reusable bot identity you own. Optionally scope it to a team (team_id). Returns a bot token ONCE — store it now, it is never shown again. Your service posts as the bot to… - **install_bot** (free) — Install a bot you own into a channel you administer (admin/owner only). After installing, the bot can post to that channel. A team-scoped bot can only be installed into its own te… - **list_bots** (free) — List the bots you own (tokens are never shown — mint a new bot to get a fresh token). - **pin_message** (free) — Pin a message in a channel you belong to. Any member can pin. Idempotent — the pin is visible to everyone in the channel. - **unpin_message** (free) — Remove a pin from a message in a channel you belong to. Any member can unpin. Idempotent. - **list_pins** (free) — List the pinned messages in a channel you belong to, newest pin first. Deleted messages are excluded. - **save_message** (free) — Save (bookmark) a message for yourself. Personal — only you see your saved items. You must belong to the message’s channel. Idempotent. - **unsave_message** (free) — Remove a message from your saved items. Personal and idempotent. - **list_saved** (free) — List the messages you have saved (bookmarked), newest first. Personal — only your own saved items. Deleted messages are excluded. ### community - **create_community** (free) — Create a Skool-style community: a feed, members, levels and its own page at /c/. You become the owner. - **list_communities** (free) — Browse public communities, or pass mine=true for the ones you belong to. - **join_community** (free) — Join a public community by its slug. Idempotent. - **leave_community** (free) — Leave a community you belong to. Owners cannot leave their own. - **post_to_community** (free) — Write a post (title + body) in a community you belong to. Comments are replies to the returned post_id. - **read_community_feed** (free) — Read the latest posts in a community you belong to, newest first. - **read_community_post** (free) — Read one post with all of its comments. - **comment_on_post** (free) — Reply to a post in a community you belong to. - **like_post** (free) — Like a post or comment (or remove your like with undo=true). Likes are what earn the author points and levels. - **community_leaderboard** (free) — The members of a community ranked by points. One point per like received; points set the level (1-9). - **list_courses** (free) — The courses in a community you belong to, with how many lessons you have completed. A course above your level comes back locked. - **read_course** (free) — The lessons in a course. Locked lessons come back with an empty body — the titles are the teaser. - **create_course** (free) — Add a course to a community you run. min_level gates it behind the leaderboard: members unlock it by earning likes. - **create_lesson** (free) — Add a lesson (markdown body, optional video URL) to a course in a community you run. - **complete_lesson** (free) — Tick a lesson off in a community classroom. Locked lessons are refused. - **list_events** (free) — Upcoming events in a community you belong to, soonest first. - **create_event** (free) — Put an event on the calendar of a community you run. - **rsvp_event** (free) — Say you are going to an event, or take it back with going=false. - **edit_community** (free) — Change the name or description of a community you run. Both appear on the landing page and in discovery. - **set_community_cover** (free) — Set the banner image on a community you run, or clear it with clear=true. The url must be an uploaded file on SpecialX — use get_upload_url or list_media to get one. - **read_community_page** (free) — The public landing page of a community: its cover, description and the ordered text/image/video blocks. Readable without joining. - **edit_community_page** (free) — Replace the landing page of a community you run with an ordered list of blocks. The WHOLE page is written at once, so read_community_page first if you mean to append. Media urls m… - **list_community_categories** (free) — The categories that filter a community feed. - **create_community_category** (free) — Add a category chip to a community you run. Pass its id as category_id on post_to_community. - **delete_community_category** (free) — Remove a category from a community you run. Posts in it are kept and become uncategorised. - **pin_community_post** (free) — Pin a post to the top of a community feed (or unpin it with undo=true). Owner/admin only. - **update_course** (free) — Change a course in a community you run: title, description, cover image, level gate or position. Only the fields you pass are touched. ### domains - **search_domains** (free) — Suggest brandable domain names for a site idea or desired name and check each for availability (free — no credits charged). Returns candidates with a per-domain price in credits;… - **purchase_domain** (confirm) — Register a domain and pay for it with account credits (price = wholesale × markup at 1 credit = $0.01). Spends REAL money and is irreversible: call WITHOUT confirm first to get a… - **enable_email_domain** (free) — Enable email on a domain you own: sending (SPF/DKIM via Cloudflare Email Sending) plus inbound routing (MX with a catch-all to the platform inbox). Idempotent — purchased domains… ### integrations - **list_integrations** (free) — Search the catalog of external services you can connect through Composio (Gmail, Slack, GitHub, Notion, and ~250 more). Returns each toolkit's slug, name, and description. Use the… - **list_my_connections** (free) — List the external accounts you have connected through Composio, with each connection's toolkit and status (e.g. active, pending). Connect new ones with connect_integration. - **connect_integration** (free) — Start connecting an external service (from list_integrations) to your account. Returns an authorization URL — open it to grant access (OAuth) or complete setup. Once authorized, r… - **run_integration_action** (confirm) — Execute a Composio tool on one of your connected accounts (requires connect_integration first). This takes REAL actions on external accounts — e.g. sending an email or creating an… ### mcp-servers - **add_mcp_server** (free) — Register a remote MCP server (HTTP transport, https only) that the supercomputer chat agent connects to alongside the built-in specialx server. Its tools appear as mcp____*.… - **list_mcp_servers** (free) — List the custom MCP servers available to the caller in supercomputer chat: their own plus any shared with workspaces they belong to. Auth headers are masked. - **remove_mcp_server** (free) — Remove one of the caller's own custom MCP servers by name. ### media - **list_models** (free) — Returns the catalog of image and video models with their per-model input schemas (JSON Schema). Pick a `slug` and pass an `input` object that matches the schema. - **generate_image** (credits) — Starts an image generation. Returns a `task_id` immediately — call `get_task` to poll for completion. Use `list_models` to see available models and their input schemas. Omit `work… - **generate_video** (credits) — Starts a video generation. Returns a `task_id` immediately — call `get_task` to poll. Video tasks can take minutes. Omit `workspace_id` to generate to your personal library. - **generate_audio** (credits) — Generate audio with ElevenLabs. Modes: tts (text-to-speech voiceover), sound_effects, music, voice_changer (speech-to-speech from an audio URL), isolate (remove background from an… - **list_voices** (free) — List available ElevenLabs voices for use as `voice_id` in generate_audio (tts / voice_changer). - **get_task** (free) — Returns the current status of a task and, when completed, embedded result media. Authorized if the user owns the task or is a member of its workspace. - **get_upload_url** (free) — Returns a presigned URL to upload an image or video into the user's media library, plus the `public_url` to reference it afterwards. Flow: (1) call this with the file's MIME type,… - **list_media** (free) — Lists media URLs the user can reference as inputs to generate_image / generate_video. By default returns the user's personal uploaded library (the pool a get_upload_url upload lan… ### memories - **memorize** (free) — Persist a durable memory about the user, their brand, preferences, or ongoing projects. Use when the user explicitly asks you to remember something, or when they state a fact that… - **recall** (free) — Search saved memories. Personal memories by default; pass workspace_id to search a workspace/team memory instead. Use before long tasks to pick up brand voice, preferences, and pr… - **forget** (free) — Delete a saved memory by id (get ids from `recall`). Use when the user asks you to forget something or a memory is wrong/outdated. ### meta - **get_group_media** (free) — Resolve a workflow (by id OR title) and a group inside it (by group-node id OR label), and return the media items in that group (in canvas order, each tagged image/video), the sti… - **deploy_meta_ads_plan** (free) — Create a Meta campaign with one ad set per group and one ad per item (or a single carousel ad when `format:"carousel"`), uploading each media URL to Meta. Everything is created PA… - **manage_meta_status** (free) — Set the status of one or more Meta campaign/ad set/ad ids. An ad only SERVES when its whole chain is ACTIVE — to go live, pass the campaign id, ad set id, AND ad id together with… - **update_meta_budget** (free) — Change the daily and/or lifetime budget on a campaign or ad set, in cents (minor units of the account currency). Provide at least one of the two. - **list_meta_campaigns** (free) — List active/paused campaigns under the connected ad account (newest first). Use a campaign id as `existingCampaignId` in deploy_meta_ads_plan to add ad sets into it. - **list_meta_adsets** (free) — List ad sets under a campaign. Use an ad set id as a group’s `existingAdsetId` in deploy_meta_ads_plan to add ads into it. - **meta_connection_status** (free) — Report whether the user has a Meta ads connection and which ad account / page is selected. Pass `include_options:true` to also list the available ad accounts, pages, and pixels (s… ### skills - **publish_skill** (free) — Publish (or republish, if you already own the name) a Claude-style skill to the supercomputer skills marketplace. `content` is the full SKILL.md: it must start with YAML frontmatt… - **unpublish_skill** (free) — Remove one of the caller's own published skills from the marketplace. Existing installs are removed too (the skill stops loading for everyone next turn). - **search_skills** (free) — Browse published skills. Optional query matches name or description (case-insensitive). Newest first. - **install_skill** (free) — Install a published skill from the marketplace. It loads into the caller's supercomputer agent on the next chat turn. - **uninstall_skill** (free) — Remove a marketplace skill from the caller's installed skills. - **list_installed_skills** (free) — List the marketplace skills the caller has installed (these load into the supercomputer agent each turn). ### social - **list_social_accounts** (free) — Report which social platforms the user has connected for publishing (Instagram, Facebook, TikTok, YouTube, X, LinkedIn) and whether any need reconnecting. Call this before post_to… - **connect_social_account** (free) — Start connecting a social account for publishing. Returns a hosted authorization URL — give it to the user to open and log in / authorize. Pass a single `platform` to connect just… - **sync_social_accounts** (free) — Refresh the set of connected social accounts from the provider after the user finishes the connect_social_account flow. Returns the updated connection list. - **post_to_social** (free) — Publish an image or video (by public URL) to one connected social platform — now, or at a future time via `scheduled_at` (scheduled posts show on the /social calendar and publish… - **list_social_posts** (free) — List the user's social posts — the scheduled queue, drafts, published history and failures (the same rows the /social calendar shows). Filter with `status`. Use it to see what is… - **cancel_social_post** (free) — Cancel a scheduled or draft social post before it publishes and refund its credit. Get the post_id from list_social_posts or post_to_social. Already-published posts cannot be canc… ### stores - **create_store** (free) — Create a hosted storefront at https://{subdomain}.specialx.ai — live immediately. It starts from the floralis-style default template: a single-product page with `header`, `product… - **list_stores** (free) — List the caller's storefronts with live store URLs and admin dashboard URLs. Use the returned `store_id` with get_store_template, update_store_template, and get_store_dashboard_li… - **get_store_template** (free) — Fetch the full template JSON (`dictionary` + `theme`) that renders a storefront. The dictionary holds every section of the page — e.g. `header`, `productHero`, `productOffer.hero.… - **update_store_template** (free) — Edit a storefront template with dot-path operations. `set` writes values by path, e.g. {"productOffer.hero.title": "New headline", "theme.--primary": "#123456"}; `unset` removes p… - **delete_store** (confirm) — Permanently delete a storefront the caller owns — removes its registry record, template, product catalog and admin access. Irreversible. Refuses if the store has any orders (its f… - **get_store_dashboard_link** (free) — Get the admin dashboard link for a store the caller owns (manage products, orders, settings). The dashboard shares the specialx.ai sign-in, so the owner lands straight in it. - **run_store_action** (free) — Run an admin action on one of your STORES (the storefront platform): products (create_product, update_product, list_products), email campaigns (create_campaign, send_campaign), cu… - **list_store_actions** (free) — List every store admin action available through run_store_action (name, group, description) — products, campaigns, customers, segments, orders, discounts, inventory, subscriptions… - **app_analytics** (free) — Visitors, revenue (integer cents), conversion rate and live visitors per app over the last N days — one app with app_id, or every app you own when it's omitted. Read-only. Same ag… ### supercomputer - **search_thread** (free) — Search the full conversation history of the supercomputer thread you're running in — including turns from before your session existed. Use it whenever you need an exact detail the… ### workflows - **list_workflows** (free) — Returns the workflow diagrams (visual ReactFlow canvases at /workflows) the user has access to — personal workflows plus any workspace the user is a member of. Each entry includes… - **get_workflow** (free) — Returns a single workflow diagram with summarized items (nodes + edges). Node types include `text` (sticky/label), `asset` (uploaded media), `mediaGen` (image/video generation), `… - **create_workflow** (free) — Create a workflow (a ReactFlow canvas at /workflows) from a high-level `blocks` spec OR a raw typed `graph`. Each block becomes a labelled group: sticky `notes` (brand/creative di… - **update_workflow** (free) — Modify an existing workflow: rename it, append new blocks below the current content (same block shape as create_workflow), or replace the canvas WHOLESALE with a raw typed `graph`… - **compose_workflow** (free) — Compose a COMPLETE workflow canvas from mixed blocks: plain board blocks (notes/assets/generations, same shape as create_workflow), `chain` blocks (long video built from ≤15s segm… - **run_workflow** (credits) — Execute a workflow diagram server-side. Loop: `get_workflow` to see node ids and current prompts → `run_workflow {dry_run:true}` to see the resolved plan (execution order, compose… - **get_workflow_run** (free) — Poll a run started by run_workflow. Each call advances the run and returns the current per-node status + any media produced so far. Call repeatedly until status is 'completed' or… ### workspaces - **list_workspaces** (free) — Returns the SpecialX workspaces the authenticated user belongs to. Use the returned `id` as `workspace_id` for `generate_image` or `generate_video`. - **create_workspace** (free) — Create a new SpecialX workspace (a project container) owned by the caller. Returns the new `workspace_id` to pass to create_workflow / generate_image / generate_video, plus its UR… - **rename_workspace** (free) — Rename a workspace the caller owns.