> 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/account.md).

# Account

Inspect your key, credit balance, usage, and prices.

Account endpoints return information about the account associated with the API key used to make the request. Use them to inspect the authenticating key and check the current credit balance. Use them also to read the credit usage history, and the credit price of each PBR action.

## Retrieve the current account.

> Returns the identity of the account associated with the API key and metadata about the API key used\
> to authenticate the request.<br>

```json
{"openapi":"3.1.0","info":{"title":"Marso Studio API","version":"0.0.1"},"tags":[{"name":"account","description":"Account endpoints return information about the account associated with the\nAPI key used to make the request. Use them to inspect the authenticating\nkey and check the current credit balance. Use them also to read the credit\nusage history, and the credit price of each PBR action.\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":{"AccountMeResponse":{"type":"object","required":["user_id","plan_tier","effective_features","api_key"],"description":"Response from `GET /account/me`. Contains the account's identity and the\nAPI key used to authenticate the request.\n","properties":{"user_id":{"type":"string","description":"Unique identifier of the account.\n"},"email":{"type":"string","description":"Email address associated with the account.\n"},"plan_tier":{"type":"string","description":"This value is always `free`. Use `subscription_plan_code` and\n`subscription_plan_class` for the current personal plan.\n"},"subscription_plan_code":{"$ref":"#/components/schemas/SubscriptionPlanCode","description":"Opaque code for the personal subscription plan."},"subscription_plan_class":{"$ref":"#/components/schemas/SubscriptionPlanClass","description":"Stable class of the personal subscription plan."},"organization_seat_plan_code":{"$ref":"#/components/schemas/SubscriptionPlanCode","description":"Opaque code for the assigned Organization seat plan."},"organization_seat_plan_class":{"$ref":"#/components/schemas/SubscriptionPlanClass","description":"Stable class of the assigned Organization seat plan."},"effective_features":{"type":"array","description":"Sorted union of features from the personal plan and an assigned\nOrganization seat. The array is empty if the response contains no\nplan information.\n","items":{"$ref":"#/components/schemas/SubscriptionFeature"}},"api_key":{"$ref":"#/components/schemas/AccountAPIKeyMeta"}}},"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"},"SubscriptionPlanClass":{"type":"string","description":"Stable class of a subscription plan.\n\nPossible enum values:\n- `free`: the Free plan class.\n- `creator`: the Creator plan class.\n- `artist_pro`: the Artist Pro plan class.\n- `studio`: the Studio plan class.\n- `enterprise`: the Enterprise plan class.\n","enum":["free","creator","artist_pro","studio","enterprise"]},"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"]},"AccountAPIKeyMeta":{"type":"object","required":["prefix","label","created_at"],"description":"Metadata about the API key used to authenticate the request.\n","properties":{"prefix":{"type":"string","description":"Recognizable prefix of the API key, formed as `mxr_live_` followed by\nthe first 7 entropy characters. This lets you identify the key without\nexposing the full secret.\n"},"label":{"type":"string","description":"Human-readable label given to the key in the dashboard.\n"},"created_at":{"$ref":"#/components/schemas/EpochMillis"},"last_used_at":{"$ref":"#/components/schemas/NullableEpochMillis"}}},"EpochMillis":{"type":"integer","format":"int64","description":"Time represented as milliseconds since the Unix epoch.\n"},"NullableEpochMillis":{"type":["integer","null"],"format":"int64","description":"Time represented as milliseconds since the Unix epoch, or `null` when the\nfield has not been set.\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"}}}}},"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":{"/account/me":{"get":{"operationId":"getAccountMe","tags":["account"],"summary":"Retrieve the current account.","description":"Returns the identity of the account associated with the API key and metadata about the API key used\nto authenticate the request.\n","responses":{"200":{"description":"Account identity and API key metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountMeResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/PlanFeatureRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"description":"Account plan information is temporarily unavailable (`SERVICE_UNAVAILABLE`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Retrieve the credit balance.

> Returns the current credit balance for the account associated with the API key, including daily-free\
> and paid credits. Organization pool balances are not exposed.<br>

```json
{"openapi":"3.1.0","info":{"title":"Marso Studio API","version":"0.0.1"},"tags":[{"name":"account","description":"Account endpoints return information about the account associated with the\nAPI key used to make the request. Use them to inspect the authenticating\nkey and check the current credit balance. Use them also to read the credit\nusage history, and the credit price of each PBR action.\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":{"AccountCreditsResponse":{"type":"object","required":["total_credits","daily_free_credits","paid_credits","billing_source","organization_member"],"description":"Response from `GET /account/credits`. Contains the account's personal\ncredit balance. Organization pool balances are not exposed.\n","properties":{"total_credits":{"type":"integer","format":"int64","description":"Sum of personal daily-free and paid credits. Does not include any\norganization pool balance.\n"},"daily_free_credits":{"type":"integer","format":"int64","description":"Remaining personal daily-free credits.\n"},"paid_credits":{"type":"integer","format":"int64","description":"Remaining personal paid credits.\n"},"billing_source":{"type":"string","enum":["personal","organization"],"description":"Preferred billing source for the account.\n\nPossible enum values:\n- `personal`: charges are applied to the account's personal credits.\n- `organization`: charges are applied to the account's organization\n  credits, if available.\n"},"organization_member":{"type":"boolean","description":"Whether the account belongs to an organization. No organization\nidentity or pool balance is exposed in this response.\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":{"/account/credits":{"get":{"operationId":"getAccountCredits","tags":["account"],"summary":"Retrieve the credit balance.","description":"Returns the current credit balance for the account associated with the API key, including daily-free\nand paid credits. Organization pool balances are not exposed.\n","responses":{"200":{"description":"Credit balance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountCreditsResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/PlanFeatureRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"description":"Credit balance information is temporarily unavailable (`SERVICE_UNAVAILABLE`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Retrieve credit usage.

> Returns credit consumption over a time range, grouped by UTC day. The\
> \`from\` and \`to\` parameters are Unix millisecond timestamps; \`to\` must be\
> greater than \`from\`, and the requested window must be 90 days or less.<br>

```json
{"openapi":"3.1.0","info":{"title":"Marso Studio API","version":"0.0.1"},"tags":[{"name":"account","description":"Account endpoints return information about the account associated with the\nAPI key used to make the request. Use them to inspect the authenticating\nkey and check the current credit balance. Use them also to read the credit\nusage history, and the credit price of each PBR action.\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":{"EpochMillis":{"type":"integer","format":"int64","description":"Time represented as milliseconds since the Unix epoch.\n"},"AccountUsageResponse":{"type":"object","required":["total_credits","buckets"],"description":"Response from `GET /account/usage`. Contains credit consumption over the\nrequested time range, grouped by UTC day.\n","properties":{"total_credits":{"type":"integer","format":"int64","description":"Total credits consumed across all days in the requested window.\n"},"buckets":{"type":"array","description":"Per-day credit usage, sorted chronologically.\n","items":{"$ref":"#/components/schemas/AccountUsageBucket"}}}},"AccountUsageBucket":{"type":"object","required":["date","credits"],"description":"One UTC day of credit usage.\n","properties":{"date":{"type":"string","description":"UTC day as an RFC 3339 date string.\n"},"credits":{"type":"integer","format":"int64","description":"Total credits consumed on that day.\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":{"/account/usage":{"get":{"operationId":"getAccountUsage","tags":["account"],"summary":"Retrieve credit usage.","description":"Returns credit consumption over a time range, grouped by UTC day. The\n`from` and `to` parameters are Unix millisecond timestamps; `to` must be\ngreater than `from`, and the requested window must be 90 days or less.\n","parameters":[{"name":"from","in":"query","required":true,"description":"Lower bound on execution `created_at`, as Unix milliseconds (inclusive).","schema":{"$ref":"#/components/schemas/EpochMillis"}},{"name":"to","in":"query","required":true,"description":"Upper bound on execution `created_at`, as Unix milliseconds (exclusive). Must be greater than `from`; window must be 90 days or less.","schema":{"$ref":"#/components/schemas/EpochMillis"}}],"responses":{"200":{"description":"Aggregated credit usage.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUsageResponse"}}}},"400":{"description":"Missing or invalid `from`/`to`, `to` not after `from`, or window exceeds 90 days (`INVALID_REQUEST`).","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":"Credit usage information is temporarily unavailable (`SERVICE_UNAVAILABLE`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}
```

## Retrieve PBR credit prices.

> Returns the credit price of every PBR generation action this API can\
> charge, for the account associated with the API key. Prices are per\
> action. A single submit costs the same as one item of the matching batch.\
> To price a batch, multiply its per-item price by the number of items.\
> \
> Prices can differ between accounts. Read this endpoint instead of storing\
> an amount.\
> \
> Each price appears under 2 keys. Read the current key, such as\
> \`mesh\_to\_pbr\`. The contract marks the \`api\_\`-prefixed key beside it as\
> deprecated, and that key carries the same number.<br>

```json
{"openapi":"3.1.0","info":{"title":"Marso Studio API","version":"0.0.1"},"tags":[{"name":"account","description":"Account endpoints return information about the account associated with the\nAPI key used to make the request. Use them to inspect the authenticating\nkey and check the current credit balance. Use them also to read the credit\nusage history, and the credit price of each PBR action.\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":{"PricingResponse":{"type":"object","required":["pricing_catalogue_id","execution_costs"],"description":"Response from `GET /pricing`. Contains the PBR credit prices that apply\nto the account associated with the API key.\n","properties":{"pricing_catalogue_id":{"type":"string","description":"Identifier of the price set, for example `standard-v3`. Include this\nvalue when you report a question about a charge.\n"},"execution_costs":{"$ref":"#/components/schemas/PricingExecutionCosts","description":"The credit price of every PBR action the API charges for. A `200`\nresponse always carries every key. The endpoint answers `503` when\nit cannot price 1 action, and never a partly priced body.\n"}}},"PricingExecutionCosts":{"type":"object","required":["mesh_to_pbr","image_to_pbr","mesh_to_pbr_batch_item","image_to_pbr_batch_item","api_mesh_pbr","api_image_pbr","api_mesh_batch_item","api_image_batch_item"],"additionalProperties":false,"description":"The credit price of one unit of each PBR action the API charges for.\nEvery price is a whole number of credits and is never negative.\n\nEach price appears under 2 keys. Always read the current key, such as\n`mesh_to_pbr`. The contract marks the `api_`-prefixed key beside it as\ndeprecated. That key carries the same number, and it stays only so a\nclient written before the rename keeps working. A new client must not\nread an `api_`-prefixed key, and an existing client should move to the\ncurrent key.\n","properties":{"mesh_to_pbr":{"type":"integer","format":"int64","minimum":0,"description":"Credits charged for one 3D mesh to PBR submit through\n`POST /pbr/execute/mesh`.\n"},"image_to_pbr":{"type":"integer","format":"int64","minimum":0,"description":"Credits charged for one image to PBR submit through\n`POST /pbr/execute/image`.\n"},"mesh_to_pbr_batch_item":{"type":"integer","format":"int64","minimum":0,"description":"Credits charged for each item of a 3D mesh to PBR batch submitted\nthrough `POST /batch/pbr/mesh`. Multiply by the number of items for\nthe price of the whole batch.\n"},"image_to_pbr_batch_item":{"type":"integer","format":"int64","minimum":0,"description":"Credits charged for each item of an image to PBR batch submitted\nthrough `POST /batch/pbr/image`. Multiply by the number of items for\nthe price of the whole batch.\n"},"api_mesh_pbr":{"type":"integer","format":"int64","minimum":0,"deprecated":true,"description":"Deprecated. Read `mesh_to_pbr` instead. This key carries the same\nprice and remains only so existing clients keep working.\n"},"api_image_pbr":{"type":"integer","format":"int64","minimum":0,"deprecated":true,"description":"Deprecated. Read `image_to_pbr` instead. This key carries the same\nprice and remains only so existing clients keep working.\n"},"api_mesh_batch_item":{"type":"integer","format":"int64","minimum":0,"deprecated":true,"description":"Deprecated. Read `mesh_to_pbr_batch_item` instead. This key carries\nthe same price and remains only so existing clients keep working.\n"},"api_image_batch_item":{"type":"integer","format":"int64","minimum":0,"deprecated":true,"description":"Deprecated. Read `image_to_pbr_batch_item` instead. This key carries\nthe same price and remains only so existing clients keep working.\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":{"/pricing":{"get":{"operationId":"getPricing","tags":["account"],"summary":"Retrieve PBR credit prices.","description":"Returns the credit price of every PBR generation action this API can\ncharge, for the account associated with the API key. Prices are per\naction. A single submit costs the same as one item of the matching batch.\nTo price a batch, multiply its per-item price by the number of items.\n\nPrices can differ between accounts. Read this endpoint instead of storing\nan amount.\n\nEach price appears under 2 keys. Read the current key, such as\n`mesh_to_pbr`. The contract marks the `api_`-prefixed key beside it as\ndeprecated, and that key carries the same number.\n","responses":{"200":{"description":"PBR credit prices for the account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/PlanFeatureRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"description":"Price information is temporarily unavailable, or an action has no\nprice (`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/account.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.
