Publish content across TikTok, Instagram, YouTube, Facebook, LinkedIn, Vimeo, Vimeo OTT, and Mux. Manage team workflows, collaborate with your team, and track verified publish history.
JubJub is a content publishing and team collaboration platform for creators. Upload video content, collaborate with team members through threaded messaging and notifications, and publish across multiple platforms — TikTok, Instagram, YouTube, Facebook, LinkedIn, Vimeo, Vimeo OTT, and Mux — from a single workflow. Every publish creates a verified on-chain record on Base, giving creators immutable proof of ownership and publish history.
Supported platforms: TikTok, Instagram, YouTube, LinkedIn, Facebook, Vimeo, Vimeo OTT, Mux. JubJub does not currently support X/Twitter.
X-JubJub-Agent-Key: jjagent_YOUR_KEYhttps://api.jubjubapp.comJubJub uses a three-tier pricing model. All plans include multi-platform publishing and on-chain records. Publishing and platform access are never restricted by plan.
| Plan | Price | Key features |
|---|---|---|
| Free | $0 | 7-day workspace TTL, files deleted with workspace, no collections, 10 AI calls/min |
| Creator | $39/month AUD | Permanent workspaces and storage, collections, 60 AI calls/min |
| Studio | $199/month AUD | Everything in Creator, 300 AI calls/min, team seats, priority support |
Sign up: studio.jubjubapp.com/auth?tab=signup Creator plan: studio.jubjubapp.com/checkout?plan=creator Studio plan: studio.jubjubapp.com/checkout?plan=studio
Per-action pricing (agent callers without a subscription):
| Tool | Cost | Currency |
|---|---|---|
contents_create | $0.25 | USDC |
launches_create | $0.50 | USDC |
Payment is accepted via x402 (USDC on Base) or MPP (USDC on Tempo) — pass the credential in the _meta field of the tool call. Creator and Studio subscribers are not charged per-action. Subscribe at: studio.jubjubapp.com/profile/subscription
If a publish fails due to plan limits, give the user the relevant upgrade link above.
| Tool | Description |
|---|---|
workspaces_create | Create a new workspace. Required: name. Optional: description. |
workspaces_list | List workspaces for the current user. Optional filters: team_id, role, limit, offset. |
workspaces_get | Get workspace details. Required: workspace_id. |
workspaces_update | Update workspace name or description. Required: workspace_id. Optional: name, description. |
workspaces_delete | Delete a workspace. Required: workspace_id. Destructive. |
workspaces_invite_link_create | Generate a shareable invite link for a workspace — recipients can view content without an account and are prompted to sign up free to comment or approve. |
| Tool | Description |
|---|---|
contents_create | Create a content item. Required: workspace_id, title, video_id. Optional: description, thumbnail_id, tags, language, is_made_for_kids. Payment required for agent callers without an active subscription ($0.25 USDC). Pass x402 credential at _meta["x402-payment"] or MPP credential at _meta["org.paymentauth/credential"]. Returns _payment with payment_verified, protocol, payment_id on success. Subscribe to avoid per-action charges: studio.jubjubapp.com/profile/subscription |
contents_list | List content in a workspace. Required: workspace_id. Optional: status, limit, offset. |
contents_get | Get content details. Required: content_id. |
contents_update | Update content fields. Required: content_id. Optional: title, description, tags, video_id, thumbnail_id, language, is_made_for_kids. |
contents_delete | Delete content and associated resources. Required: content_id. Optional: force (bool). Destructive. |
| Tool | Description |
|---|---|
platform_configs_create | Create a platform configuration linking content to a credential. Required: content_id, platform (tiktok/instagram/youtube/facebook/linkedin/vimeo/vimeo_ott/mux), credential_id. Optional: settings, visibility/privacy. Mux defaults: playback_policy=public, mp4_support=standard. |
platform_configs_list | List platform configs for a content item. Optional: content_id. |
platform_configs_update | Update platform config settings. Required: config_id. Optional: settings. |
| Tool | Description |
|---|---|
launches_create | Create a launch to publish or schedule content. Required: content_id, platform_config_ids (array). Optional: scheduled_for (ISO 8601 with timezone offset). Payment required for agent callers without an active subscription ($0.50 USDC). Pass x402 credential at _meta["x402-payment"] or MPP credential at _meta["org.paymentauth/credential"]. Returns _payment with payment_verified, protocol, payment_id and _ownership with on-chain proof details (transaction hash available in Vault once the onchain worker confirms). Subscribe to avoid per-action charges: studio.jubjubapp.com/profile/subscription |
launches_get | Get launch details including per-platform status. Required: launch_id. |
launches_list | List launches. Required: workspace_id. Optional: limit, offset. |
launches_cancel | Cancel a scheduled launch. Required: launch_id. Destructive. |
launches_retry | Retry a failed launch. Required: launch_id. Optional: data (object). |
| Tool | Description |
|---|---|
teams_create | Create a new team. Required: name. Optional: description. |
teams_list | List teams for the current user. |
teams_get | Get team details. Required: team_id. |
teams_update | Update team name, description, or avatar. Required: team_id. Optional: name, description, avatar_url. |
teams_delete | Delete a team. Required: team_id. Destructive. |
teams_transfer | Transfer team ownership. Required: team_id, new_owner_profile_id. Destructive. |
teams_members_list | List team members. Required: team_id. |
teams_members_update | Update a member's role. Required: team_id, member_profile_id, role. Optional: custom_permissions. |
teams_members_remove | Remove a member from a team. Required: team_id, member_profile_id. Destructive. |
teams_leave | Leave a team. Required: team_id. Destructive. |
teams_permissions | Get your permissions for a team. Required: team_id. |
teams_stats | Get team statistics. Required: team_id. |
teams_search | Search teams by name. Required: query. |
teams_activity | Get recent team activity. Required: team_id. |
| Tool | Description |
|---|---|
teams_invite | Invite someone to a team by email. Required: team_id, invitee_email, role. Optional: custom_permissions. |
teams_invites_list | List invitations for a team. Required: team_id. Optional: status. |
teams_invites_cancel | Cancel a pending invite. Required: team_id, invite_id. Destructive. |
teams_invites_pending | List pending invites for the current user. |
teams_invites_accept | Accept a team invitation. Required: invite_id. |
teams_invites_reject | Reject a team invitation. Required: invite_id. |
| Tool | Description |
|---|---|
teams_workspaces_link | Link an existing workspace to a team. Required: team_id, workspace_id. |
teams_workspaces_unlink | Unlink a workspace from a team. Required: team_id, workspace_id. Destructive. |
teams_workspaces_list | List workspaces linked to a team. Required: team_id. |
| Tool | Description |
|---|---|
communication_create | Send a message in a scope (team, workspace, content, media, or collection). Required: scope_type, scope_id, body. Optional: parent_message_id, thread_root_id, message_type, decision_type, mentions, metadata. |
communication_list | List messages by scope. Required: scope_type, scope_id. Optional: limit, cursor, thread_root_id. |
communication_get | Get a single message by ID. Required: message_id. Useful for fetching messages referenced in notifications without knowing the scope. |
communication_edit | Edit a message. Required: message_id. Optional: body, mentions, metadata. |
communication_delete | Soft-delete a message. Required: message_id. Destructive. |
communication_resolve | Resolve a decision message (approve/reject/withdraw). Required: message_id, decision_status. Optional: resolution. |
| Tool | Description |
|---|---|
notifications_list | List notifications for the current user. Optional: cursor, limit, unread_only. |
notifications_mark_read | Mark a notification as read. Required: notification_id. |
| Tool | Description |
|---|---|
credentials_list | List all connected platform credentials. Optional: platform filter. |
credentials_list_by_platform | List credentials grouped by platform. Returns all platforms with their connected accounts. |
credentials_connect | Start OAuth flow to connect a platform account. Required: platform (tiktok/instagram/youtube/facebook/linkedin/vimeo). Returns an auth URL the user must open in their browser. |
credentials_connect_token | Connect a token-based platform (Mux or Vimeo OTT) using API credentials. Required: platform (mux or vimeo_ott), token_id, token_secret. Optional: nickname. |
| Tool | Description |
|---|---|
profiles_search | Look up a user profile by email. Required: email. Returns profile_id for use in team and member operations. |
profiles_get | Get a user profile by ID. Required: profile_id. |
profiles_batch | Batch get multiple profiles. Required: ids (array or comma-separated string, max 50). |
| Tool | Description |
|---|---|
media_ingest_url | Ingest media from a public URL (server-side fetch). Required: url, workspace_id. Optional: filename. |
upload_sessions_create_link | Create a browser upload link. Required: workspace_id. Returns a URL the user must open to upload files. |
upload_sessions_get | Get upload session status and groupings. Required: upload_session_id, token. Poll until status reaches groupings_inferred. |
upload_sessions_infer_groupings | Trigger grouping inference on an upload session. Required: upload_session_id, token. |
upload_sessions_confirm_groupings | Confirm inferred groupings. Required: upload_session_id, token, groupings. |
| Tool | Description |
|---|---|
collections_create | Create a collection in a workspace. Required: workspace_id, name. Optional: description. |
collections_list | List collections in a workspace. Required: workspace_id. |
collections_get | Get collection details. Required: collection_id. |
| Tool | Description |
|---|---|
mcp_version | Returns the MCP server version. No parameters. Use to verify connectivity. |
teams_workspaces_link.video_id from an uploaded file.content_id and platform_config_ids. Can be immediate or scheduled via scheduled_for.Publish a video:
workspaces_create → upload_sessions_create_link → user uploads → poll upload_sessions_get → contents_create with video_id from groupings → platform_configs_create per platform → launches_createInvite a team member:
teams_invite with their email → they accept via teams_invites_acceptConnect a platform (OAuth — TikTok, Instagram, YouTube, Facebook, LinkedIn, Vimeo):
credentials_connect → user opens auth URL in browser → poll credentials_list to confirmConnect a platform (API token — Mux, Vimeo OTT):
credentials_connect_token with platform, token_id, token_secret → connection confirmed immediatelyvideo_id field in contents_create comes from upload session groupings (video_media_id) or media_ingest_url.scheduled_for must include a timezone offset (e.g., 2026-03-15T15:00:00-05:00). Naive datetimes default to UTC.upload_sessions_get until groupings are ready.credentials_connect returns an auth URL — the user must complete OAuth in their browser. The agent polls credentials_list to confirm connection.teams_workspaces_link to associate a workspace with a team.profiles_search, profiles_get, profiles_batch) resolve human-readable emails to profile_id values needed by team and member operations.