Skip to content
MV2API docsStudioDownload for agentsConnect Musavir

MCP guide

Your studio, wherever you think.

Connect Musavir to your AI tools. Use your characters, create images and videos, and manage your work through conversation.

Requires Musavir Pro. Existing credits and generation limits apply. Free accounts and trials cannot use MCP.

MCP endpoint
https://api.musavir.ai/mcp

Manage connections in Developer · Download the complete MCP guide

Connect your account

  1. Add the URL above as a remote MCP server in your AI app.
  2. Choose OAuth authentication. Sign in to Musavir in the browser with Google or email/password.
  3. Review the app name, callback address and permissions. Choose Allow access.
  4. Return to your AI app and ask it to list your Musavir projects.

Your AI app stores the connection credentials and refreshes them automatically. Keep passwords and tokens out of conversations.

Client setup

Codex

Add this to your Codex configuration, then run codex mcp login musavir.

Codex configuration
[mcp_servers.musavir]
url = "https://api.musavir.ai/mcp"
tool_timeout_sec = 300

Use /mcp to inspect the connection. Official Codex instructions.

Claude Code

Claude Code setup
claude mcp add --transport http musavir https://api.musavir.ai/mcp

Open /mcp, select Musavir and authenticate. Official Claude Code instructions.

Other apps

Use a client that supports Streamable HTTP and OAuth. Hosted clients need the public HTTPS endpoint. Custom-server availability, file uploads and media previews depend on your client and its plan.

Choose permissions

The default connection requests studio read/write and account read. For developer or profile tools, request the corresponding scopes in your client and reconnect. Administration and anything that moves money are not available over MCP; manage them on the website.

PermissionAccess
studio:readRead your characters, creations, projects and templates
studio:writeCreate and delete studio content; generate using your credits
account:readRead your profile, credit balance and billing history
account:writeUpdate your profile and notification preferences
developer:readRead API key metadata, usage and request logs
developer:writeUpdate, pause and revoke API keys

Create and upload

  1. Discover templates and characters, then call musavir_generation_estimate with the intended settings.
  2. Authorize the credit cost and call musavir_start_generation.
  3. Poll musavir_generation with the returned ID until complete.
  4. Open the result URL. If character-sheet approval is needed, review it before approving the video stage.
json
{
  "input": {
    "kind": "photo",
    "prompt": "A ceramic vase in soft morning light"
  },
  "requestId": "create-vase-001",
  "selection": "id status"
}

For characters, create a draft, request selfie upload URLs, upload the files, then start training. Reference upload tools return signed URLs and object keys: your client must PUT the file bytes before using those keys. If your client cannot upload files, prepare the references in the studio.

MCP can read your existing studio library. Results use expiring media URLs; read the resource again to get a fresh URL. Inline previews depend on the client.

Retries and progress

Every write requires a unique requestId. Retry a lost response with the same ID and identical arguments. Changing arguments returns idempotency_conflict. An uncertain or running request returns request_pending: inspect the resource or contact support before doing anything again.

Generation runs in the background. Poll from two seconds, backing off toward ten seconds. A failed job must be reported as failed. Collection page sizes are capped at 100 when the operation exposes a limit.

Manage access

Open Developer → Connected apps to review permissions and disconnect. Access stops on the next request; jobs already submitted continue. Every request checks Pro, account status and current roles.

Connections expire after 90 days; refresh tokens expire after 30 days of inactivity and rotate after use. Reconnect after expiry or refresh-token reuse. Account security, new API secrets and raw payment details remain browser flows, and so do subscriptions, credit purchases, cards and automatic reload. MCP can read your balance and history, never charge.

Troubleshooting

  • 401 invalid_token: refresh or reconnect. Website sessions and REST keys cannot authenticate MCP requests.
  • 403 subscription_required: restore Pro in Billing.
  • insufficient_scope: reconnect with the required permission.
  • 429: respect Retry-After; each connection permits 120 requests per minute.
  • Expired connection request: restart login in your AI app.
  • MCP not enabled: the deployment still needs its migration and configuration.

Tool reference

123 explicit tools cover the application. Your client discovers only tools allowed by your connection. Each tool takes an input object; object results optionally accept a field selection. Writes additionally require requestId.

studio:read — Read your characters, creations, projects and templates

musavir_g42_experience

G42 experience. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "runId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_g42_photoshoot_quote

Review the selected corporate photoshoot cost and shared account allowances before admission. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        },
        "templateIds": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "characterId",
        "templateIds"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_g42_photoshoot_retry_quote

Review the cost of retrying failed corporate photoshoot items before admission. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "itemIds": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "itemIds"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_g42_character_training_quote

Review corporate identity training cost and the ordinary account allowance before admission. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        },
        "selfieKeys": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "characterId",
        "selfieKeys"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_g42_gallery

G42 gallery. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "cursor": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "limit": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_app_config

App config. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_projects

Projects. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_characters

Characters. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_character_statuses

Character statuses. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_video_reference_asset

One video reference asset: poll it until status is "active" (about a minute) before using its id in startGeneration.videoReferenceAssetIds; "failed" means the provider rejected the image. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_character

Character. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_templates

Templates. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "kind": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_creations

Browse existing studio creations, including content created on the website. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "first": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_creations_page

Browse a bounded page of owned creations with server-side search, filters and cursor pagination. Use endCursor to load the next page. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "after": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "first": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        },
        "kind": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "search": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "sort": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_creations_by_ids

Read up to 256 explicitly selected owned creations by ID, including selections outside the current Library page. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "ids"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_creation

Creation. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_generation_draft

Generation draft. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_generation

Poll one generation job: status, progress, error and, when finished, signed result URLs. For a video, follow with musavir_generation_frames to actually look at it. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_active_generations

Active generations. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_failed_generations

Failed generations. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_daily_inspiration

Daily inspiration. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_reference_suggestions

Reference suggestions. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_template_request_for_generation

Template request for generation. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "generationId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "generationId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_my_template_requests

My template requests. Uses the signed-in user’s existing permissions and product rules. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_items

List the account's items: products, animals, creatures, objects, wardrobe and locations with their reference sheets. Requires the Agentic mode tool to be switched on for the account. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_item

Read one item with its reference sheet, source photos and fidelity notes. Requires the Agentic mode tool to be switched on for the account. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_generation_frames

Still frames spread across one of the user's finished videos, with timestamps and signed URLs. This is how an agent watches a clip: review motion, continuity, wardrobe, identity and artefacts second by second before keeping or chaining it. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "count": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "How many frames, 1-30 (default 6). Two per second gives a careful review of a short clip."
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_designs

List the account's Layers designs: layered, animated designs that lay themselves out on every ad size. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_design_summaries

List lightweight design cards without loading complete documents. Read a selected design separately to edit it. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_design

Read one design: the JSON document (artboards, layers bottom first, per-size overrides, motion), signed URLs for its assets, and the automatic check results. Read musavir://guides/layers first. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_design_revisions

The history of a design, newest first: who changed it (user, assistant, agent) and what. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_design_revision_doc

The document as it was at one revision, to compare before restoring. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "version": {
          "type": "integer",
          "minimum": -2147483648,
          "maximum": 2147483647
        }
      },
      "required": [
        "id",
        "version"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_design_capabilities

Whether flat-image decomposition and the built-in assistant are available on this deployment. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_design_svg

One size of a design as a layered SVG file (text as text, shapes as vectors, pictures linked). Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "artboardId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Defaults to the master."
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_brand_kits

The account's brand kits: a client's colours, typefaces and logos, with signed URLs. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_reusable_reference_versions

Read immutable published image-reference versions for an owned character or item. Permission: studio:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "entityId": {
          "type": "string",
          "maxLength": 32000
        },
        "entityType": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "entityId",
        "entityType"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}
studio:write — Create and delete studio content; generate using your credits

musavir_create_g42_character

Create g42 character. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "consentConfirmed": {
          "type": "boolean"
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "selfieKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "consentConfirmed",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_g42_character_selfie_upload_urls

G42 character selfie upload urls. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        },
        "contentTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": -2147483648,
            "maximum": 2147483647
          },
          "maxItems": 100
        }
      },
      "required": [
        "characterId",
        "contentTypes",
        "sizes"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_start_g42_character_training

Start g42 character training. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "quoteId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "selfieKeys": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "characterId",
        "selfieKeys"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_g42_character

Delete g42 character. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "characterId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_start_g42_photoshoot

Start g42 photoshoot. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "quoteId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "templateIds": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "characterId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_retry_g42_photoshoot_item

Retry g42 photoshoot item. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "itemId": {
          "type": "string",
          "maxLength": 32000
        },
        "quoteId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "itemId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_g42_photoshoot_item

Delete g42 photoshoot item. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "itemId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "itemId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_retry_failed_g42_photoshoot_items

Retry failed g42 photoshoot items. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "quoteId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "runId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "runId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_create_project

Create project. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_rename_project

Rename project. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_reorder_projects

Reorder projects. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "ids"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_project

Delete project. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_assign_generations_to_project

Assign generations to project. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "generationIds": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "generationIds"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_create_character

Create a character draft. Then obtain selfie upload URLs, upload files and start character training. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "selfieKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        },
        "sourcePhotos": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "requestId"
  ]
}

musavir_character_selfie_upload_urls

Obtain signed upload URLs for character source photos. Upload bytes with HTTP PUT to each returned URL before training. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        },
        "contentTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": -2147483648,
            "maximum": 2147483647
          },
          "maxItems": 100
        }
      },
      "required": [
        "characterId",
        "contentTypes",
        "sizes"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_generation_reference_upload_urls

Obtain signed upload URLs for image references. Upload bytes with HTTP PUT, then pass returned object keys to start_generation. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "contentTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": -2147483648,
            "maximum": 2147483647
          },
          "maxItems": 100
        }
      },
      "required": [
        "contentTypes",
        "sizes"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_generation_video_reference_upload_urls

Obtain signed upload URLs for video references. Upload bytes with HTTP PUT before normalization or generation. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "contentTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": -2147483648,
            "maximum": 2147483647
          },
          "maxItems": 100
        }
      },
      "required": [
        "contentTypes",
        "sizes"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_normalize_generation_video_reference

Normalize generation video reference: returns the prepared key (use it from then on), duration, width and height, waiting up to 25 seconds. If preparation is still running it fails with MEDIA_PREPARATION_PENDING and a preparationId: call again with the same key and allowTrim (it returns the same job) or poll musavir_media_preparation. An overlong clip returns VIDEO_TRIM_CONSENT_REQUIRED with measured durationSeconds/maxDurationSeconds and remains untouched. Obtain permission to keep only the first supported seconds, then retry the same key with allowTrim=true and a new requestId. For an immediate receipt use musavir_start_media_preparation. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "allowTrim": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Explicitly permit shortening this uploaded clip to the supported duration after VIDEO_TRIM_CONSENT_REQUIRED. Omit or false to preserve an overlong original."
        },
        "key": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "key"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_complete_static_image_upload

Verify a still-image upload and return its immutable browser-safe PNG/JPEG key before attaching it to a character, item, design or generation. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "key": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "key"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_start_media_preparation

Queue image verification or video normalization without holding an HTTP request open. Repeat the same owned upload key to recover its original receipt. Poll media_preparation by returned ID. Overlong video requires explicit allowTrim after VIDEO_TRIM_CONSENT_REQUIRED. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "allowTrim": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "key": {
          "type": "string",
          "maxLength": 32000
        },
        "kind": {
          "type": "string",
          "enum": [
            "image",
            "video"
          ]
        }
      },
      "required": [
        "key",
        "kind"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_start_design_assist_job

Queue Layers assistance outside the HTTP request. Retain the same requestId across retries and poll design_assist_job. Assistance can spend credits: charge on a durably published, owned, recoverable result even if never applied. Queued work has no funding reservation; balance and applicable design-version checks run again at execution. Plan and picture operations remain browser-only. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "input": {},
        "operation": {
          "type": "string",
          "maxLength": 32000
        },
        "requestId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id",
        "input",
        "operation",
        "requestId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_generation_audio_reference_upload_urls

Obtain signed upload URLs for MP3/WAV audio. Upload bytes with HTTP PUT. The default generation_reference purpose keeps the configured video model limits; local_edit accepts one prepared soundtrack up to 15 MiB for free video editing and does not generate speech or music. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "contentTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "purpose": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "generation_reference",
                "local_edit"
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "generation_reference keeps configured Seedance limits. local_edit accepts one prepared MP3/WAV up to 15 MiB for free soundtrack replacement, independent of provider audio access. Neither option purchases a generation."
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": -2147483648,
            "maximum": 2147483647
          },
          "maxItems": 100
        }
      },
      "required": [
        "contentTypes",
        "sizes"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_create_video_reference_asset

Register an uploaded image as a video reference asset. With isCharacter: true this is how a PERSON from the user's photos gets into a video without a saved character: poll videoReferenceAsset until "active", then pass the id in startGeneration.videoReferenceAssetIds. With isCharacter: false it is an object, place or style reference for video. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "isCharacter": {
          "type": "boolean"
        },
        "sourceImageKey": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "isCharacter",
        "sourceImageKey"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_start_character_training

Start paid character preparation after every source photo is uploaded. Poll character for status. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "characterId": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "instructions": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "selfieKeys": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "characterId",
        "selfieKeys"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_save_generation_draft

Save generation draft. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "state": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "state"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_character

Delete character. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_regenerate_character

Retrain a character's identity sheet (paid). instructions: what to correct. fresh: true rebuilds from the source photos alone; false refines the current sheet, which tends to stay close to it. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "expectedSelfieKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        },
        "fresh": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "instructions": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_set_character_photos

Replace a character's source photos with this ordered list of object keys: reorder, remove, or add keys uploaded through characterSelfieUploadUrls. The first photo weighs most. Free; updates the originals immediately. Rebuilding the identity sheet requires a separate regenerateCharacter call. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "keys": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "id",
        "keys"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_start_generation

Start one image or one video clip. People are cast with characterIds and things that must stay exact with itemIds; never upload a photo of a person as a reference. For a film, chain shots with firstFrameGenerationId and join them with musavir_edit_video. Returns a job to poll with musavir_generation. For work on a Layers design, pass its designId (edit access required); all paid Layers steps use the admin-configured Layers multiplier, default 3.5×. Spends the user's credits. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "audio": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "audioRefKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        },
        "characterId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Legacy single character. Prefer characterIds."
        },
        "characterIds": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "The PEOPLE in the shot, by character id (up to 3). The strongest way to put a real or recurring person in a render: each character carries a trained identity and, for video, a provider-registered portrait. Without a character: for stills pass their photos in refKeys; for video register one photo with createVideoReferenceAsset(isCharacter: true) and pass it in videoReferenceAssetIds. Never pass a photo of a person as a video refKey or first frame — the provider refuses it."
        },
        "designId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Editable Layers design receiving this picture. Uses Layers pricing."
        },
        "durationSeconds": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "Video length in seconds, 4-30. One clip is one action (usually 4-12 s); a film is several clips chained and joined, never one long clip."
        },
        "firstFrameGenerationId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Video only. Start this clip from a finished generation of yours: a video gives its LAST frame (so the next shot of a film begins exactly where the previous one ended), a still without people gives itself. Send it ALONE — no characterIds, itemIds or reference images, because the frame already carries the person, the product and the place — and describe the action from where that clip ended. A chained shot keeps the previous camera; for a new angle, shoot a fresh clip from characters and items instead."
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "itemIds": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "The THINGS that must stay exact, by item id (up to 3): products, vehicles, animals, creatures, objects, wardrobe pieces and locations. Each item carries a reference sheet and its source photos, attached automatically. Lock every noun that must not drift across a set or a film as an item before shooting."
        },
        "kind": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "\"photo\" or \"video\". Required when no templateId is given."
        },
        "omniReferenceTaskType": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Video reference operation: edit, extend, or auto. An edit requires exactly one source video and inherits its duration and aspect ratio."
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "prompt": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "The full prompt. Required without a template. Read the musavir://guides resources first: they hold the prompting rules for the image and video models, the film rules and the review standard."
        },
        "ratio": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Aspect ratio, e.g. 16:9, 9:16, 1:1, 3:4. A chained shot must use the ratio of the clip it starts from."
        },
        "refKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "Ordered keys of uploaded reference IMAGES (from generationReferenceUploadUrls) for style, mood, a place or an object. Refer to them in the prompt as Image 1, Image 2, … in this order. Not for people (use characterIds), and better as items when the thing must stay exact."
        },
        "refLocation": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "refObject": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "refStyle": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "refs": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "resolution": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Video: 480p | 720p | 1080p. Photo: 1K | 1.5K | 2K. Trial a shot at 480p, shoot the chain at 720p, 1080p only when asked."
        },
        "templateId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "videoRefKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        },
        "videoReferenceAssetIds": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "Video only: ids of ACTIVE video reference assets (createVideoReferenceAsset). One made with isCharacter: true from a photo of a person is a valid identity for the video — no saved character needed. Referred to in the prompt as @image1, @image2… in this order."
        },
        "watermark": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "requestId"
  ]
}

musavir_approve_video_character_sheets

Approve prepared character sheets and proceed with the paid video stage. For an older paused image or video job marked INPUT_CONFIRMATION_REQUIRED, first query generation.inputReview, show its current ordered references and pricing to the user, then pass that review’s inputFingerprint. Reuses the existing job and reservation; obtain the user’s approval first. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "inputFingerprint": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_dismiss_generation

Dismiss generation. Uses the signed-in user’s existing permissions and product rules. Returns false when the job was kept instead: work the provider is already rendering is never removed by a dismiss (use musavir_cancel_generation). Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_creations

Delete creations. Uses the signed-in user’s existing permissions and product rules. Returns how many were removed. Finished and failed items are removed (delivered work is not refunded). Unsent work, or a video BytePlus cancelled while still queued, is refunded and removed. Work the provider is already rendering cannot be cancelled: without acceptCharge it is kept, not removed (it finishes, is charged like any render, and appears in the library); with acceptCharge=true it is removed and charged exactly what the provider bills. Ask the user before accepting a charge. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "acceptCharge": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        }
      },
      "required": [
        "ids"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_cancel_generation

Cancel one render that has not finished. CANCELLED: it was never sent, or BytePlus still had the video queued — refunded and removed. RENDERING: the provider is already rendering it, so it cannot be cancelled and nothing changed — tell the user they will be charged if they delete it, and only with their agreement call again with acceptCharge=true (DELETED: removed, charged exactly what the provider bills). Without it, it finishes and appears in the library. FINISHED: nothing was left to cancel. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "acceptCharge": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ]
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_submit_generation_as_template

Submit generation as template. Uses the signed-in user’s existing permissions and product rules. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "generationId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "generationId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_item_source_upload_urls

Get signed upload URLs for an item's source photographs. Requires the Agentic mode tool to be switched on for the account. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "contentTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": -2147483648,
            "maximum": 2147483647
          },
          "maxItems": 100
        }
      },
      "required": [
        "contentTypes",
        "sizes"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_create_item

Create an item from uploaded photos or a description and build its reference sheet (a billed image render). Requires the Agentic mode tool to be switched on for the account. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "description": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "kind": {
          "type": "string",
          "maxLength": 32000
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "sourceKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "kind",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_update_item

Update an item's name, description or fidelity notes. Requires the Agentic mode tool to be switched on for the account. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "description": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "notes": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_regenerate_item_sheet

Rebuild an item's reference sheet with an optional correction (a billed image render). Requires the Agentic mode tool to be switched on for the account. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "instructions": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_item

Delete an item. Requires the Agentic mode tool to be switched on for the account. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_edit_video

The editor queues a free durable job: retain its idempotency key, poll musavir_generation by the returned ID and wait for success before reading URLs, reviewing frames or chaining. Turn 1-60 finished-video segments, in playback order, into ONE NEW clip. A segment can reuse an earlier source clip with a different trim. Keep selected output to 120 seconds and unique source media to 180 seconds. One clip in = trim it (startSeconds/endSeconds), re-time it (speed, 0.5 = slow motion) or reframe it; several = a cut. Reframe with ratio (e.g. 9:16), mute, add supplied timed captions, or replace the original audio with one prepared MP3/WAV soundtrack (audioKey). Captions are up to 24 ordered `{ startSeconds, endSeconds, text }` literal cues on the final output timeline after trim/speed; end is exclusive. They are not transcription, speech synthesis, or generated text. Upload audio with musavir_generation_audio_reference_upload_urls and purpose local_edit: one track up to 15 MiB, independent of provider audio access. Short tracks pad with silence without looping or shortening the video; long tracks trim to output duration, with an end fade. This does not generate voice or music; the edit itself is local and free. Hard cuts, originals untouched. Returns the new clip's id and label: an ordinary video generation you can review, file, chain from and edit again. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "audioKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "One prepared MP3/WAV soundtrack uploaded with generationAudioReferenceUploadUrls(purpose: local_edit). It replaces the clips' original audio and fades out at the end. Short tracks are padded with silence, not looped, and never shorten the video; long tracks are trimmed to the output duration. This does not generate voice or music. Local editing is free and does not require a provider audio-reference route."
        },
        "captions": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "endSeconds": {
                    "type": "number",
                    "description": "End time on the finished cut, exclusive."
                  },
                  "startSeconds": {
                    "type": "number",
                    "description": "Start time on the finished cut, inclusive."
                  },
                  "text": {
                    "type": "string",
                    "maxLength": 32000,
                    "description": "Literal supplied caption text. It is not transcribed or generated."
                  }
                },
                "required": [
                  "endSeconds",
                  "startSeconds",
                  "text"
                ]
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "Up to 24 ordered, non-overlapping literal captions. `{ startSeconds, endSeconds, text }` is on the final output timeline after every slice and speed change. The end is exclusive, so touching cues do not overlap. No transcription or speech is generated."
        },
        "clips": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "endSeconds": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Where the slice ends (default: the end of the clip). A slice is at least 0.5 s."
              },
              "id": {
                "type": "string",
                "maxLength": 32000,
                "description": "A finished video generation of yours."
              },
              "speed": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Re-time this clip, 0.25-4 (default 1). 0.5 is half-speed slow motion and doubles the time it takes in the cut; 2 is double speed."
              },
              "startSeconds": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Where the slice starts (default 0). Cut in on motion, after any idle opening."
              }
            },
            "required": [
              "id"
            ]
          },
          "maxItems": 100,
          "description": "Ordered edit segments (1-60; a source may repeat)."
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Stable key for this exact edit. A replay returns the same child, including an interrupted or still-running edit, without encoding another copy."
        },
        "label": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "The name of the new clip; returned as `label` so you can refer to it later."
        },
        "mute": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Drop the clips' own sound. Use it for fast montages: each clip has its own ambience, and cutting that every two seconds is noise."
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "ratio": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Reframe the film to another aspect ratio by centre-cropping to cover, e.g. \"9:16\" for a vertical cutdown of a 16:9 shoot. Default: the first clip's frame."
        }
      },
      "required": [
        "clips"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_create_design

Start a design with a blank master artboard of a given size, or import a whole document. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "doc": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "description": "Optional complete design document to import instead of a blank one."
        },
        "height": {
          "type": "integer",
          "minimum": -2147483648,
          "maximum": 2147483647
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "sourceFileKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "sourceFileName": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "width": {
          "type": "integer",
          "minimum": -2147483648,
          "maximum": 2147483647
        },
        "workspaceId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "height",
        "name",
        "width"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_change_design

THE way a design changes: an array of commands applied in order, all or nothing, recorded as one revision. add_layer, remove_layer, update_layer (pass artboardId to change one size only), reorder_layer, duplicate_layer, set_motion (cutId: one length only), set_cut (another length of the animation, e.g. 15 s next to 6 s), reset_override, add_artboard, update_artboard, remove_artboard, set_document, recolor. You can draw logos and shapes yourself as SVG path layers and animate them. Read musavir://guides/layers for the model. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "commands": {
          "description": "An array of command objects, e.g. [{\"type\":\"update_layer\",\"layerId\":\"l_1\",\"patch\":{\"box\":{\"x\":40}}}]."
        },
        "expectedVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "The version you read. A stale version is rejected without applying commands. Omission preserves legacy unconditional edits; new clients should always send it."
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Stable identity of this exact command batch. Reuse it after response loss."
        },
        "label": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "A short readable line for the history panel."
        }
      },
      "required": [
        "commands",
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_assist_design

Ask Musavir's built-in assistant to change a design in plain words; it returns the edited design once the change is applied. A retry with the same requestId returns the accepted answer instead of paying again. For long requests, musavir_start_design_assist_job queues the same work and musavir_design_assist_job polls it. BILLED: every model call it makes is charged to the user's credits at the chosen model's list price times the admin-configured Layers multiplier (default 3.5×; one request is usually one to five calls; higher thinking and GPT-6 Astra / Claude Opus 5.5 cost more). Ask the user before calling it, pass model and thinking deliberately, and read chargedCredits for what the request cost; an account with no credits is refused (GENERATION_BLOCKED). As an agent you can usually do better, and for free, by reading the design and calling musavir_change_design yourself. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "artboardId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "The size being looked at, so \"here\" means something."
        },
        "assetIds": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "Owned asset library entries selected with @ in the Layers composer."
        },
        "expectedVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "The design version shown with this request. If supplied, checked before model work. Applying assistant commands always checks the version the model actually read."
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "model": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "CLAUDE_FABLE_5_1",
                "CLAUDE_OPUS_5_5",
                "DOLA",
                "GPT_6_1_SOL",
                "GPT_6_ASTRA",
                "GPT_6_LUNA",
                "GPT_6_SOL",
                "LOCAL"
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "The model to run on (see designCapabilities.assistModels). The deployment's default when omitted."
        },
        "observations": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "Optional: facts measured by the client on the rendered size (e.g. \"“T&Cs Apply” reads at about 1.1:1 against what is behind it\"). Advisory context for the assistant."
        },
        "pictureHeight": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "The attached picture's height in pixels."
        },
        "pictureKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Optional: a key from designAssetUploadUrls holding a picture the person attached (a logo, a product, a reference). Shown to the model; it can place it as an image layer."
        },
        "pictureWidth": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "The attached picture's width in pixels, so it is placed in proportion."
        },
        "prompt": {
          "type": "string",
          "maxLength": 32000
        },
        "propose": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Return the checked commands without saving them (field `commands`), so several size reviews can run at once and be applied together with changeDesign. Each only touches its own size."
        },
        "requestId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Stable UUID for this exact assistant request. Replay retrieves its accepted response."
        },
        "selectedLayerIds": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "The layers currently selected, so \"this\" means something."
        },
        "step": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "ANIMATE",
                "DESIGN",
                "EDIT",
                "REFINE",
                "ROLES"
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "Which step of a planned request this is (see planDesignAssist). EDIT when omitted."
        },
        "thinking": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "HIGH",
                "LOW",
                "MAX",
                "MEDIUM",
                "OFF",
                "XHIGH"
              ]
            },
            {
              "type": "null"
            }
          ],
          "description": "How long the model thinks first. The model's recommended level when omitted."
        },
        "viewKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Optional: a key from designAssetUploadUrls holding a render of the active artboard, so the assistant can see the design, not only its numbers."
        }
      },
      "required": [
        "id",
        "prompt"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_restore_design

Go back to an earlier revision. It is itself a new revision, so it can be undone. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "expectedVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "The current design version you read, not the historical version being restored. Omission preserves legacy unconditional restores; new clients should always send it."
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Stable identity of this exact restore. Reuse it after response loss."
        },
        "version": {
          "type": "integer",
          "minimum": -2147483648,
          "maximum": 2147483647
        }
      },
      "required": [
        "id",
        "version"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_rename_design

Rename a design. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_design

Delete a design. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_design_asset_upload_urls

Signed upload targets for images to place in a design (PNG, JPG, WebP, SVG). PUT the bytes, then use the key as an image layer assetKey. The user's own generated images can be used by their key as well. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "contentTypes": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 32000
          },
          "maxItems": 100
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": -2147483648,
            "maximum": 2147483647
          },
          "maxItems": 100
        }
      },
      "required": [
        "contentTypes",
        "sizes"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_set_design_thumbnail

Set the preview image of a design from an uploaded key. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "expectedVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "The saved version: a stale version is rejected. Omission sets the thumbnail unconditionally (legacy behaviour); new clients should always send it."
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "key": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id",
        "key"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_design_cutout

Remove the background of one of your pictures; returns a new asset key. Check designCapabilities first. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "imageKey": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "imageKey"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_design_vectorize

Turn a raster logo or flat artwork into a real SVG; returns a new asset key. Check designCapabilities first. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "imageKey": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "imageKey"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_design_split_image

Split one picture into transparent, trimmed pieces with the boxes they occupied. Check designCapabilities first. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "imageKey": {
          "type": "string",
          "maxLength": 32000
        },
        "layers": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "How many pieces, 2-10 (default 4)."
        }
      },
      "required": [
        "imageKey"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_design_asset_from_generation

The asset key of one of your finished image generations, to place in a design. To edit, repair or extend a design picture by prompt: startGeneration with the target designId and its assetKey in refKeys, then this. Paid Layers work uses the admin-configured Layers multiplier (default 3.5×). Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "generationId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "generationId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_save_brand_kit

Create or replace a brand kit. Upload fonts and logos first with designAssetUploadUrls. Font mappings used by retained design history cannot change; create a new kit for different fonts. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "expectedVersion": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "The version you read, when replacing an existing brand kit: a stale version is rejected. Omission replaces it unconditionally (legacy behaviour); new clients should always send it."
        },
        "id": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "kit": {},
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "workspaceId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "kit",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_delete_brand_kit

Remove an unused brand kit. Deletion is refused while retained designs or their history reference it, to preserve their fonts. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_create_design_from_picture

Start a design from one uploaded picture with no model involved: as "picture" the picture becomes the page, ready for text to fly in over it; as "logo" it is centred on a square page, already animated. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "as": {
          "type": "string",
          "maxLength": 32000,
          "description": "\"picture\" or \"logo\"."
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Stable key for this exact import. Replays return the same design after a lost response."
        },
        "imageKey": {
          "type": "string",
          "maxLength": 32000,
          "description": "An owned uploaded image key."
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "workspaceId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "as",
        "imageKey",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_create_design_from_generation

Start a native design from one exact owned completed image. No generation or charge. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "generationId": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Stable key for this exact import. Replays return the same design after a lost response."
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "projectId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "generationId",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_publish_reference

Explicitly publish a chosen completed generation as a reusable image-reference character or item. Free metadata only, not training or video activation. Requires provenance and idempotency key; replacement requires the current published version. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "entityId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "entityType": {
          "type": "string",
          "maxLength": 32000
        },
        "expectedPublishedVersionId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "idempotencyKey": {
          "type": "string",
          "maxLength": 32000
        },
        "itemKind": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "notes": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "provenance": {
          "type": "string",
          "maxLength": 32000
        },
        "sourceGenerationId": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "entityType",
        "idempotencyKey",
        "name",
        "provenance",
        "sourceGenerationId"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_revise_reference_notes

Create a new metadata-only version of an owned reusable reference with expected published version and idempotency key. Does not purchase a render. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "entityId": {
          "type": "string",
          "maxLength": 32000
        },
        "entityType": {
          "type": "string",
          "maxLength": 32000
        },
        "expectedPublishedVersionId": {
          "type": "string",
          "maxLength": 32000
        },
        "idempotencyKey": {
          "type": "string",
          "maxLength": 32000
        },
        "notes": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "entityId",
        "entityType",
        "expectedPublishedVersionId",
        "idempotencyKey"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_import_design_from_image

Split an uploaded flat image into transparent layers and open it as a design. Check designCapabilities first. Permission: studio:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "imageKey": {
          "type": "string",
          "maxLength": 32000,
          "description": "A key returned by designAssetUploadUrls."
        },
        "layers": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ],
          "description": "How many layers to split into, 2-10 (default 6)."
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "imageKey",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}
account:read — Read your profile, credit balance and billing history

musavir_me

Me. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_generation_estimate

Price a generation in credits before starting it. Use matching settings (kind, duration, resolution, cast), refKeys and firstFrameGenerationId. Include designId for work on an editable Layers design so the Layers multiplier matches startGeneration. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "castCount": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        },
        "designId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Editable Layers design receiving this media. Uses Layers pricing, matching startGeneration."
        },
        "durationSeconds": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        },
        "firstFrameGenerationId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Owned completed generation used as the first frame, matching startGeneration."
        },
        "firstFrameKey": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ],
          "description": "Owned first-frame image key for a video estimate."
        },
        "inputVideoDurationSeconds": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "kind": {
          "type": "string",
          "maxLength": 32000
        },
        "ratio": {
          "type": "string",
          "maxLength": 32000
        },
        "refKeys": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ],
          "description": "The same owned image reference keys passed to startGeneration, so Layers source pricing matches."
        },
        "referenceCount": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        },
        "resolution": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "kind",
        "ratio",
        "resolution"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": [
    "input"
  ]
}

musavir_account

Account. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_subscription_offer

Subscription offer. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_pack_offer

Pack offer. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_credit_packs

Credit packs. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_billing_history

Billing history. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_notifications

Notifications. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "limit": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_notifications_page

Notifications page. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "cursor": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "limit": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_notification_preferences

Notification preferences. Uses the signed-in user’s existing permissions and product rules. Permission: account:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}
account:write — Update your profile and notification preferences

musavir_complete_onboarding

Complete onboarding. Uses the signed-in user’s existing permissions and product rules. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "requestId"
  ]
}

musavir_resend_verification_email

Resend verification email. Uses the signed-in user’s existing permissions and product rules. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "requestId"
  ]
}

musavir_update_profile

Update profile. Uses the signed-in user’s existing permissions and product rules. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "fullName": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "requestId"
  ]
}

musavir_submit_contact

Send a message to Musavir support on the user’s behalf. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "budget": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "company": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "email": {
          "type": "string",
          "maxLength": 32000
        },
        "message": {
          "type": "string",
          "maxLength": 32000
        },
        "name": {
          "type": "string",
          "maxLength": 32000
        },
        "website": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "email",
        "message",
        "name"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_mark_notifications_read

Mark notifications read. Uses the signed-in user’s existing permissions and product rules. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "requestId"
  ]
}

musavir_mark_notification_read

Mark notification read. Uses the signed-in user’s existing permissions and product rules. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_clear_notifications

Clear notifications. Uses the signed-in user’s existing permissions and product rules. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "requestId"
  ]
}

musavir_update_notification_preferences

Update notification preferences. Uses the signed-in user’s existing permissions and product rules. Permission: account:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "preferences": {
          "type": "string",
          "maxLength": 32000
        }
      },
      "required": [
        "preferences"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}
developer:read — Read API key metadata, usage and request logs

musavir_api_keys

Api keys. Uses the signed-in user’s existing permissions and product rules. Permission: developer:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_api_key_limits

Api key limits. Uses the signed-in user’s existing permissions and product rules. Permission: developer:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_api_access

Api access. Uses the signed-in user’s existing permissions and product rules. Permission: developer:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {},
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_api_request_log

Api request log. Uses the signed-in user’s existing permissions and product rules. Permission: developer:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "cursor": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "keyId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "limit": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}

musavir_api_usage

Api usage. Uses the signed-in user’s existing permissions and product rules. Permission: developer:read.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "days": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -2147483648,
              "maximum": 2147483647
            },
            {
              "type": "null"
            }
          ]
        },
        "keyId": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": []
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    }
  },
  "required": []
}
developer:write — Update, pause and revoke API keys

musavir_update_api_key

Update api key. Uses the signed-in user’s existing permissions and product rules. Permission: developer:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "expiresAt": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        },
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "monthlyCreditCap": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "name": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        },
        "scopes": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32000
              },
              "maxItems": 100
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_set_api_key_paused

Set api key paused. Uses the signed-in user’s existing permissions and product rules. Permission: developer:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "paused": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "paused"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

musavir_revoke_api_key

Revoke api key. Uses the signed-in user’s existing permissions and product rules. Permission: developer:write.

json
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "input": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 32000
        },
        "reason": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32000
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ]
    },
    "selection": {
      "type": "string",
      "maxLength": 6000,
      "description": "Optional result fields, e.g. \"id status\". Nested fields use braces. Defaults to the standard projection."
    },
    "requestId": {
      "type": "string",
      "minLength": 8,
      "maxLength": 128,
      "description": "Unique ID for this intended action. Always reuse on retries with identical arguments. Never replace it to retry an uncertain operation."
    }
  },
  "required": [
    "input",
    "requestId"
  ]
}

Protocol: stateless Streamable HTTP with the official TypeScript SDK 1.30.0, including protocol 2025-11-25. Legacy SSE and stdio are not exposed. Read musavir://guide or use the create-with-musavir prompt for in-client guidance.