> For the complete documentation index, see [llms.txt](https://docs.m-xr.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.m-xr.com/marso-studio-api/api/addons.md).

# Addons

Check the latest release of a Marso Studio addon.

Addon endpoints return release data for Marso Studio addons, such as the Blender addon. Use them to check for a new version to install.

## Retrieve the latest version of a Marso Studio addon.

> Returns the latest published version and display name for one Marso\
> Studio addon. An addon build calls this endpoint to check for an update,\
> then prompts its user to download and install the new version.<br>

```json
{"openapi":"3.1.0","info":{"title":"Marso Studio API","version":"0.0.1"},"tags":[{"name":"addons","description":"Addon endpoints return release data for Marso Studio addons, such as the\nBlender addon. Use them to check for a new version to install.\n"}],"servers":[{"url":"https://api.marso.app/api/public/v1/","description":"Production server."}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key created in the Marso Studio dashboard. The value has the form\n`mxr_live_<entropy>` and is sent as a Bearer token in the `Authorization`\nheader.\n"}},"schemas":{"AddonLatestResponse":{"type":"object","required":["version","display_name"],"description":"The response body for `GET /addons`.","properties":{"version":{"type":"string","description":"The latest published version of the addon, for example `2.0.1`.\n"},"display_name":{"type":"string","description":"The name to show a user for the addon, for example\n`Marso for Blender`.\n"}}},"Error":{"type":"object","required":["error"],"description":"Canonical error envelope. The error payload is nested under the `error`\nkey.\n","properties":{"error":{"$ref":"#/components/schemas/ErrorBody"}}},"ErrorBody":{"type":"object","description":"The body of an error response. The `code` is a stable value clients can\nbranch on; the `message` is a human-readable explanation.\n","required":["code","message"],"properties":{"code":{"$ref":"#/components/schemas/ErrorCode"},"message":{"type":"string","description":"Human-readable description of the error.\n"},"details":{"type":["object","null"],"description":"Additional structured information about the error, or `null` if no\nextra details are available.\n","additionalProperties":true}}},"ErrorCode":{"type":"string","description":"Machine-readable error code. The enum contains every code that this API\ncan return.\n\nPossible enum values:\n- `INVALID_REQUEST`: the request body or a query parameter failed validation.\n- `MALFORMED_UUID`: a path parameter that should be a UUID is not one.\n- `UNAUTHORIZED`: the request could not be authenticated.\n- `API_KEY_MISSING`: no API key was supplied.\n- `API_KEY_INVALID`: the supplied API key does not match any known key.\n- `API_KEY_REVOKED`: the supplied API key has been revoked.\n- `PLAN_FEATURE_REQUIRED`: the account plan does not include a required feature.\n- `SUBSCRIPTION_FEATURE_REQUIRED`: a new Marketplace purchase requires a paid plan or assigned seat.\n- `PRICE_CHANGED`: the selected price differs from the price in the request.\n- `VERSION_CHANGED`: the selected Marketplace version differs from the requested version.\n- `IDEMPOTENCY_CONFLICT`: the same key was used for a different purchase request.\n- `DOWNLOAD_UNAVAILABLE`: the retained private content is temporarily unavailable.\n- `CATALOGUE_CHANGED`: the catalogue changed during pagination; restart the query.\n- `LISTING_NOT_FOUND`: the selected listing is absent or delisted.\n- `MARKETPLACE_DOWNLOAD_ONLY`: Marketplace content supports download and cannot enter generation.\n- `INSUFFICIENT_CREDITS`: the account does not have enough credits for this request.\n- `QUOTA_EXCEEDED`: a usage quota for the account has been exceeded.\n- `FILE_TOO_LARGE`: an uploaded or referenced file exceeds the allowed size.\n- `UPLOAD_TIMEOUT`: an image search upload exceeded 60 seconds. Try a smaller file or a faster connection.\n- `INVALID_CONTENT_TYPE`: a file's content type does not match its declared or expected type.\n- `UNSUPPORTED_ASSET_FORMAT`: a file's extension is not one of the supported asset formats.\n- `FORMAT_NOT_AVAILABLE`: the requested downloadable format does not exist for this asset.\n- `INVALID_FBX_ZIP_STRUCTURE`: a `.zip` upload is not a valid FBX bundle. The error message says why.\n- `IMAGE_RESOLUTION_EXCEEDED`: an image is larger than 4096 by 4096 pixels, or a texture in a mesh file is larger than 8192 by 8192 pixels.\n- `VALIDATION_FAILED`: the API could not check the uploaded file. Upload it again. This is the `error.code` of an upload status read. A failed batch item or run uses the same word with another meaning (see `ExecutionErrorBody`).\n- `UPLOAD_EXPIRED`: the upload did not finish within 1 hour. Upload the file again.\n- `MESH_REQUIREMENTS_NOT_MET`: the mesh file has no polygon geometry, no base-color texture, no UV coordinates, or it names a texture that the upload does not hold.\n- `COLLECTION_NOT_FOUND`: the collection does not exist in your account.\n- `PROJECT_NOT_FOUND`: the project does not exist, or another account owns it.\n- `GRAPH_NOT_FOUND`: the graph does not exist in this project.\n- `NODE_NOT_FOUND`: the node does not exist in this graph.\n- `GROUP_NOT_FOUND`: the group does not exist in this graph.\n- `PROJECT_NODE_LIMIT_EXCEEDED`: the project already holds as many nodes as it may hold.\n- `CONFLICT`: the request conflicts with the current state, so the server made no change.\n- `ASSET_NOT_FOUND`: the asset does not exist or does not belong to the account.\n- `ASSET_IN_USE`: an active execution uses a component, or another PBR execution shares a source or target component.\n- `BATCH_TOO_LARGE`: the batch contains more items than the endpoint allows.\n- `CONCURRENT_EXECUTION_LIMIT_EXCEEDED`: the account has reached its limit on simultaneous submissions.\n- `PBR_FAILURE_CAP_EXCEEDED`: the account has too many recent failed PBR runs; new submissions are temporarily blocked.\n- `EXECUTION_NOT_FOUND`: the execution or batch does not exist or does not belong to the account.\n- `EXECUTION_IN_PROGRESS`: the request conflicts with an execution that is still running.\n- `RATE_LIMITED`: the API key's rate limit was exceeded.\n- `SERVICE_UNAVAILABLE`: the requested operation is temporarily unavailable; retry later.\n- `MAINTENANCE_MODE`: the API is temporarily unavailable for maintenance.\n- `INTERNAL_SERVER_ERROR`: an unexpected server error occurred.\n- `WORKFLOW_CREATION_FAILED`: the API could not start the requested generation.\n- `WORKFLOW_API_ERROR`: generation stopped because of an unexpected error.\n","enum":["INVALID_REQUEST","MALFORMED_UUID","UNAUTHORIZED","API_KEY_MISSING","API_KEY_INVALID","API_KEY_REVOKED","PLAN_FEATURE_REQUIRED","SUBSCRIPTION_FEATURE_REQUIRED","PRICE_CHANGED","VERSION_CHANGED","IDEMPOTENCY_CONFLICT","DOWNLOAD_UNAVAILABLE","CATALOGUE_CHANGED","LISTING_NOT_FOUND","MARKETPLACE_DOWNLOAD_ONLY","INSUFFICIENT_CREDITS","QUOTA_EXCEEDED","FILE_TOO_LARGE","UPLOAD_TIMEOUT","INVALID_CONTENT_TYPE","UNSUPPORTED_ASSET_FORMAT","FORMAT_NOT_AVAILABLE","INVALID_FBX_ZIP_STRUCTURE","IMAGE_RESOLUTION_EXCEEDED","VALIDATION_FAILED","UPLOAD_EXPIRED","MESH_REQUIREMENTS_NOT_MET","COLLECTION_NOT_FOUND","PROJECT_NOT_FOUND","GRAPH_NOT_FOUND","NODE_NOT_FOUND","GROUP_NOT_FOUND","PROJECT_NODE_LIMIT_EXCEEDED","CONFLICT","ASSET_NOT_FOUND","ASSET_IN_USE","BATCH_TOO_LARGE","CONCURRENT_EXECUTION_LIMIT_EXCEEDED","PBR_FAILURE_CAP_EXCEEDED","EXECUTION_NOT_FOUND","EXECUTION_IN_PROGRESS","RATE_LIMITED","SERVICE_UNAVAILABLE","MAINTENANCE_MODE","INTERNAL_SERVER_ERROR","WORKFLOW_CREATION_FAILED","WORKFLOW_API_ERROR"]},"PlanFeatureRequiredError":{"type":"object","required":["error"],"description":"The error envelope for a missing subscription feature.","properties":{"error":{"type":"object","required":["code","message","details"],"description":"The missing-feature error body.","properties":{"code":{"type":"string","const":"PLAN_FEATURE_REQUIRED","description":"Stable error code for a missing subscription feature."},"message":{"type":"string","description":"Human-readable description of the error."},"details":{"$ref":"#/components/schemas/PlanFeatureRequiredErrorDetails"}}}}},"PlanFeatureRequiredErrorDetails":{"type":"object","required":["feature","upgrade_plan_codes"],"description":"The missing feature and the active plans that provide it.","properties":{"feature":{"$ref":"#/components/schemas/SubscriptionFeature"},"upgrade_plan_codes":{"type":"array","description":"Active plans available for purchase that provide the missing\nfeature. The array uses plan class and opaque code order.\n","items":{"$ref":"#/components/schemas/SubscriptionPlanCode"}}}},"SubscriptionFeature":{"type":"string","description":"Product capability available to the account.\n\nPossible enum values:\n- `commercial_license`: commercial-use rights.\n- `api_pbr`: PBR generation through the Public Platform API.\n- `api_asset_download`: asset downloads through the Public Platform API.\n- `custom_polycount`: custom polygon counts for 3D generation.\n- `image_edit`: image editing.\n- `multiview`: multiview generation.\n- `asset_download`: asset downloads in the Marso web app.\n- `api_access`: access to the Public Platform API.\n- `scene_generation`: scene generation and multi-asset runs in the Marso web app.\n- `application_apps`: the Sim Ready and Game Ready apps.\n","enum":["commercial_license","api_pbr","api_asset_download","custom_polycount","image_edit","multiview","asset_download","api_access","scene_generation","application_apps"]},"SubscriptionPlanCode":{"type":"string","pattern":"^plan_[A-Za-z0-9]{7,64}$","description":"Opaque and immutable code for a subscription plan. A plan display name\ncan change. The code starts with `plan_`, followed by 7 to 64 ASCII\nletters or digits.\n"}},"responses":{"Unauthorized":{"description":"The API key is missing, invalid, or revoked. Possible error codes:\n`API_KEY_MISSING`, `API_KEY_INVALID`, `API_KEY_REVOKED`, or `UNAUTHORIZED`.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"PlanFeatureRequired":{"description":"The account does not have the plan feature required by this operation\n(`PLAN_FEATURE_REQUIRED`). The Free plan lacks `api_access`, so every\noperation refuses a Free account with this response. An account that\nlacks `api_pbr` or `api_asset_download` also gets it on the routes that\nneed those features.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanFeatureRequiredError"}}}},"RateLimited":{"description":"Rate limit exceeded (`RATE_LIMITED`). The response includes a `Retry-After`\nheader with the number of seconds to wait before retrying, plus the\n`X-RateLimit-*` headers. Those headers are also present on successful (2xx)\nresponses so a client can pace itself.\n","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Request burst capacity for the API key.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current burst window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix epoch seconds when the burst capacity is fully restored.\n","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/addons":{"get":{"operationId":"getLatestAddonVersion","tags":["addons"],"summary":"Retrieve the latest version of a Marso Studio addon.","description":"Returns the latest published version and display name for one Marso\nStudio addon. An addon build calls this endpoint to check for an update,\nthen prompts its user to download and install the new version.\n","parameters":[{"name":"addon","in":"query","required":true,"description":"The Marso Studio addon to look up.","schema":{"type":"string","enum":["blender"]}}],"responses":{"200":{"description":"The latest published version of the addon.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonLatestResponse"}}}},"400":{"description":"The request is invalid because the `addon` query parameter is absent\nor names an addon this API does not support (`INVALID_REQUEST`).\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/PlanFeatureRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"description":"Release information is temporarily unavailable for the requested\naddon (`SERVICE_UNAVAILABLE`).\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.m-xr.com/marso-studio-api/api/addons.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
