For the complete documentation index, see llms.txt. This page is also available as Markdown.

PBR

Submit meshes and images for PBR generation.

Batches group one or more PBR generation jobs together. Use these endpoints to submit 3D mesh to PBR or image to PBR batches, poll a batch for progress, and list recent batches.

Generate PBR materials from 3D meshes.

post

Submits one or more ready mesh assets for 3D mesh to PBR generation. The same options are applied to every mesh in the batch. Each asset must be a ready mesh uploaded via POST /batch/uploads.

The request returns immediately with a batch_id (202). Poll GET /batch/{batch_id} for the batch status and, as each item finishes, its generated material maps and download URLs. Credits are reserved when you submit and refunded automatically for any item that fails, so you are only charged for successful results.

Authorizations
AuthorizationstringRequired

API key created in the Marso Studio dashboard. The value has the form mxr_live_<entropy> and is sent as a Bearer token in the Authorization header.

Body

Request body for POST /batch/pbr/mesh. Submit one or more ready mesh assets for 3D mesh to PBR generation.

asset_idsstring · uuid[] · min: 1 · max: 200Required

IDs of the ready mesh assets to process. These assets must have been uploaded via POST /batch/uploads and must currently be in the ready state.

Responses
202

Batch created and queued.

application/json

Body returned by POST /batch/pbr/* (202) and GET /batch/{batch_id} (200). On submission items is empty; poll the batch to populate it. completed_at is set once the batch reaches a terminal status; failed_at is set only when that terminal status is FAILED.

batch_idstringRequired

Unique identifier of the batch.

statusstring · enumRequired

Aggregate status of a PBR batch.

Possible enum values:

  • QUEUED: the batch is waiting to start.
  • RUNNING: at least one item is being processed.
  • COMPLETED: every item succeeded.
  • PARTIALLY_COMPLETED: the batch finished with a mix of successes and failures.
  • FAILED: every item failed.
Possible values:
created_atinteger · int64Required

Time represented as milliseconds since the Unix epoch.

completed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

failed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

post/batch/pbr/mesh
POST /api/public/v1/batch/pbr/mesh HTTP/1.1
Host: api.marso.app/
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 161

{
  "asset_ids": [
    "123e4567-e89b-12d3-a456-426614174000"
  ],
  "options": {
    "detail_transfer": {
      "enabled": true
    },
    "output_2d": {
      "orm": {
        "enabled": false,
        "channel_order": "ORM"
      }
    }
  }
}
{
  "batch_id": "text",
  "status": "QUEUED",
  "request_counts": {
    "total": 1,
    "completed": 1,
    "failed": 1,
    "pending": 1
  },
  "created_at": 1,
  "completed_at": null,
  "failed_at": null,
  "items": [
    {
      "execution_id": "text",
      "asset_id": "text",
      "status": "QUEUED",
      "thumbnail_url": "https://example.com",
      "thumbnail_url_expires_at": 1,
      "pbr_material_assets": {
        "ANY_ADDITIONAL_PROPERTY": {
          "asset_id": "text",
          "download_url": "https://example.com",
          "expires_at": 1
        }
      },
      "usdz": {
        "asset_id": "text",
        "download_url": "https://example.com",
        "expires_at": 1
      },
      "error": {
        "code": "VALIDATION_FAILED",
        "message": "text"
      },
      "created_at": 1
    }
  ]
}

Generate PBR materials from images.

post

Submits one or more ready image assets for image to PBR generation. The image counterpart of POST /batch/pbr/mesh. It takes the same options, except output_2d. Image results do not include a USDZ file.

The request returns immediately with a batch_id (202). Poll GET /batch/{batch_id} for the batch status and each image's generated material maps and download URLs. Credits are reserved when you submit and refunded automatically for any item that fails.

Authorizations
AuthorizationstringRequired

API key created in the Marso Studio dashboard. The value has the form mxr_live_<entropy> and is sent as a Bearer token in the Authorization header.

Body

Request body for POST /batch/pbr/image. Image PBR options do not include output_2d.

asset_idsstring · uuid[] · min: 1 · max: 200Required

IDs of the ready image assets to process. These assets must have been uploaded via POST /batch/uploads and must currently be in the ready state.

Responses
202

Batch created and queued.

application/json

Body returned by POST /batch/pbr/* (202) and GET /batch/{batch_id} (200). On submission items is empty; poll the batch to populate it. completed_at is set once the batch reaches a terminal status; failed_at is set only when that terminal status is FAILED.

batch_idstringRequired

Unique identifier of the batch.

statusstring · enumRequired

Aggregate status of a PBR batch.

Possible enum values:

  • QUEUED: the batch is waiting to start.
  • RUNNING: at least one item is being processed.
  • COMPLETED: every item succeeded.
  • PARTIALLY_COMPLETED: the batch finished with a mix of successes and failures.
  • FAILED: every item failed.
Possible values:
created_atinteger · int64Required

Time represented as milliseconds since the Unix epoch.

completed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

failed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

post/batch/pbr/image
POST /api/public/v1/batch/pbr/image HTTP/1.1
Host: api.marso.app/
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 101

{
  "asset_ids": [
    "123e4567-e89b-12d3-a456-426614174000"
  ],
  "options": {
    "detail_transfer": {
      "enabled": true
    }
  }
}
{
  "batch_id": "text",
  "status": "QUEUED",
  "request_counts": {
    "total": 1,
    "completed": 1,
    "failed": 1,
    "pending": 1
  },
  "created_at": 1,
  "completed_at": null,
  "failed_at": null,
  "items": [
    {
      "execution_id": "text",
      "asset_id": "text",
      "status": "QUEUED",
      "thumbnail_url": "https://example.com",
      "thumbnail_url_expires_at": 1,
      "pbr_material_assets": {
        "ANY_ADDITIONAL_PROPERTY": {
          "asset_id": "text",
          "download_url": "https://example.com",
          "expires_at": 1
        }
      },
      "usdz": {
        "asset_id": "text",
        "download_url": "https://example.com",
        "expires_at": 1
      },
      "error": {
        "code": "VALIDATION_FAILED",
        "message": "text"
      },
      "created_at": 1
    }
  ]
}

List your batches.

get

Returns your PBR batches, newest first, as paginated summaries. Each summary contains the batch ID, status, per-status counts, and timestamps. Per-item results are not included; use GET /batch/{batch_id} to fetch the full results for a batch.

Authorizations
AuthorizationstringRequired

API key created in the Marso Studio dashboard. The value has the form mxr_live_<entropy> and is sent as a Bearer token in the Authorization header.

Query parameters
limitinteger · min: 1Optional

Page size. Defaults to 50 and is clamped to a maximum of 200. Non-positive or non-numeric values fall back to the default.

Default: 50
cursorstringOptional

Opaque pagination cursor returned by the previous page as next_cursor. Omit on the first request.

Responses
200

A page of batch summaries.

application/json

Response from GET /batch. A paginated list of batch summaries.

next_cursorstringOptional

Opaque cursor for the next page. Absent or empty when the result set is exhausted.

get/batch
GET /api/public/v1/batch HTTP/1.1
Host: api.marso.app/
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "batches": [
    {
      "batch_id": "text",
      "status": "QUEUED",
      "request_counts": {
        "total": 1,
        "completed": 1,
        "failed": 1,
        "pending": 1
      },
      "created_at": 1,
      "completed_at": null,
      "failed_at": null
    }
  ],
  "next_cursor": "text"
}

Retrieve a batch.

get

Returns a batch's status, per-item counts, and the finished results for each item. As items finish, the response includes their generated material maps with ready-to-use download URLs, or a typed error for failed items. This is the endpoint you poll after submitting a PBR batch. items is empty until at least one item has reached a terminal state.

Authorizations
AuthorizationstringRequired

API key created in the Marso Studio dashboard. The value has the form mxr_live_<entropy> and is sent as a Bearer token in the Authorization header.

Path parameters
batch_idstring · uuidRequired

Unique identifier of the batch.

Responses
200

Batch status and finished items.

application/json

Body returned by POST /batch/pbr/* (202) and GET /batch/{batch_id} (200). On submission items is empty; poll the batch to populate it. completed_at is set once the batch reaches a terminal status; failed_at is set only when that terminal status is FAILED.

batch_idstringRequired

Unique identifier of the batch.

statusstring · enumRequired

Aggregate status of a PBR batch.

Possible enum values:

  • QUEUED: the batch is waiting to start.
  • RUNNING: at least one item is being processed.
  • COMPLETED: every item succeeded.
  • PARTIALLY_COMPLETED: the batch finished with a mix of successes and failures.
  • FAILED: every item failed.
Possible values:
created_atinteger · int64Required

Time represented as milliseconds since the Unix epoch.

completed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

failed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

get/batch/{batch_id}
GET /api/public/v1/batch/{batch_id} HTTP/1.1
Host: api.marso.app/
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "batch_id": "text",
  "status": "QUEUED",
  "request_counts": {
    "total": 1,
    "completed": 1,
    "failed": 1,
    "pending": 1
  },
  "created_at": 1,
  "completed_at": null,
  "failed_at": null,
  "items": [
    {
      "execution_id": "text",
      "asset_id": "text",
      "status": "QUEUED",
      "thumbnail_url": "https://example.com",
      "thumbnail_url_expires_at": 1,
      "pbr_material_assets": {
        "ANY_ADDITIONAL_PROPERTY": {
          "asset_id": "text",
          "download_url": "https://example.com",
          "expires_at": 1
        }
      },
      "usdz": {
        "asset_id": "text",
        "download_url": "https://example.com",
        "expires_at": 1
      },
      "error": {
        "code": "VALIDATION_FAILED",
        "message": "text"
      },
      "created_at": 1
    }
  ]
}

Generate PBR materials from one 3D mesh.

post

Submits one ready mesh asset for 3D mesh to PBR generation. The asset must be a ready mesh uploaded with POST /uploads or POST /batch/uploads.

The request returns immediately with an execution_id (202). Poll GET /pbr/executions/{execution_id} for the status and, once the run finishes, the generated material maps and their download URLs. Credits are reserved when you submit and refunded automatically if the run fails, so you are only charged for a successful result.

Use POST /batch/pbr/mesh instead when you have several meshes to submit together.

Authorizations
AuthorizationstringRequired

API key created in the Marso Studio dashboard. The value has the form mxr_live_<entropy> and is sent as a Bearer token in the Authorization header.

Body

Request body for POST /pbr/execute/mesh. Submit one ready mesh asset for PBR generation.

asset_idstring · uuidRequired

The ID of the mesh asset to process. Upload it with POST /uploads or POST /batch/uploads first. Its status must be ready.

Responses
202

The execution was created and queued.

application/json

Body returned by POST /pbr/execute/* (202) and GET /pbr/executions/{execution_id} (200). It describes one execution and is not a batch envelope: there is no batch ID, no counts, and no items array.

On submission every result field is empty, because nothing has finished yet. asset_id is the source asset you submitted, so a failed execution is always traceable to its input. pbr_material_assets maps each "<slot>/<pass>" to its generated texture asset and a ready-to-use download_url, and usdz is the textured 3D model of a succeeded mesh execution. thumbnail_url is a preview image, always present on a succeeded mesh execution, and best-effort on a succeeded image execution. error is set only when the execution failed.

execution_idstringRequired

Unique identifier of the execution. Poll it at GET /pbr/executions/{execution_id}.

asset_idstringOptional

The ID of the source asset that was submitted.

statusstring · enumRequired

Status of a single item within a batch.

Possible enum values:

  • QUEUED: the item is waiting to start.
  • RUNNING: the item is being processed.
  • SUCCEEDED: the item completed successfully.
  • PARTIAL_SUCCEEDED: the item completed but some optional outputs are missing.
  • FAILED: the item failed. See the error field for details.
  • CANCELED: the item stopped without producing a result, and any credits held for it are returned. Submit the request again to retry it.
Possible values:
thumbnail_urlstring · uriOptional

URL of a preview image. Always present on a succeeded mesh execution; best-effort on a succeeded image execution.

thumbnail_url_expires_atinteger · int64Optional

Time represented as milliseconds since the Unix epoch.

created_atinteger · int64Required

Time represented as milliseconds since the Unix epoch.

completed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

post/pbr/execute/mesh
POST /api/public/v1/pbr/execute/mesh HTTP/1.1
Host: api.marso.app/
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 158

{
  "asset_id": "123e4567-e89b-12d3-a456-426614174000",
  "options": {
    "detail_transfer": {
      "enabled": true
    },
    "output_2d": {
      "orm": {
        "enabled": false,
        "channel_order": "ORM"
      }
    }
  }
}
{
  "execution_id": "text",
  "asset_id": "text",
  "status": "QUEUED",
  "thumbnail_url": "https://example.com",
  "thumbnail_url_expires_at": 1,
  "pbr_material_assets": {
    "ANY_ADDITIONAL_PROPERTY": {
      "asset_id": "text",
      "download_url": "https://example.com",
      "expires_at": 1
    }
  },
  "usdz": {
    "asset_id": "text",
    "download_url": "https://example.com",
    "expires_at": 1
  },
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "text"
  },
  "created_at": 1,
  "completed_at": null
}

Generate PBR materials from one image.

post

Submits one ready image asset for image to PBR generation. The image counterpart of POST /pbr/execute/mesh. It takes the same options, except output_2d. Image results do not include a USDZ file.

The request returns immediately with an execution_id (202). Poll GET /pbr/executions/{execution_id} for the status and the generated material maps. Credits are reserved when you submit and refunded automatically if the run fails.

Use POST /batch/pbr/image instead when you have several images to submit together.

Authorizations
AuthorizationstringRequired

API key created in the Marso Studio dashboard. The value has the form mxr_live_<entropy> and is sent as a Bearer token in the Authorization header.

Body

Request body for POST /pbr/execute/image. Submit one ready image asset for PBR generation. Image PBR options do not include output_2d.

asset_idstring · uuidRequired

The ID of the image asset to process. Upload it with POST /uploads or POST /batch/uploads first. Its status must be ready.

Responses
202

The execution was created and queued.

application/json

Body returned by POST /pbr/execute/* (202) and GET /pbr/executions/{execution_id} (200). It describes one execution and is not a batch envelope: there is no batch ID, no counts, and no items array.

On submission every result field is empty, because nothing has finished yet. asset_id is the source asset you submitted, so a failed execution is always traceable to its input. pbr_material_assets maps each "<slot>/<pass>" to its generated texture asset and a ready-to-use download_url, and usdz is the textured 3D model of a succeeded mesh execution. thumbnail_url is a preview image, always present on a succeeded mesh execution, and best-effort on a succeeded image execution. error is set only when the execution failed.

execution_idstringRequired

Unique identifier of the execution. Poll it at GET /pbr/executions/{execution_id}.

asset_idstringOptional

The ID of the source asset that was submitted.

statusstring · enumRequired

Status of a single item within a batch.

Possible enum values:

  • QUEUED: the item is waiting to start.
  • RUNNING: the item is being processed.
  • SUCCEEDED: the item completed successfully.
  • PARTIAL_SUCCEEDED: the item completed but some optional outputs are missing.
  • FAILED: the item failed. See the error field for details.
  • CANCELED: the item stopped without producing a result, and any credits held for it are returned. Submit the request again to retry it.
Possible values:
thumbnail_urlstring · uriOptional

URL of a preview image. Always present on a succeeded mesh execution; best-effort on a succeeded image execution.

thumbnail_url_expires_atinteger · int64Optional

Time represented as milliseconds since the Unix epoch.

created_atinteger · int64Required

Time represented as milliseconds since the Unix epoch.

completed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

post/pbr/execute/image
POST /api/public/v1/pbr/execute/image HTTP/1.1
Host: api.marso.app/
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 98

{
  "asset_id": "123e4567-e89b-12d3-a456-426614174000",
  "options": {
    "detail_transfer": {
      "enabled": true
    }
  }
}
{
  "execution_id": "text",
  "asset_id": "text",
  "status": "QUEUED",
  "thumbnail_url": "https://example.com",
  "thumbnail_url_expires_at": 1,
  "pbr_material_assets": {
    "ANY_ADDITIONAL_PROPERTY": {
      "asset_id": "text",
      "download_url": "https://example.com",
      "expires_at": 1
    }
  },
  "usdz": {
    "asset_id": "text",
    "download_url": "https://example.com",
    "expires_at": 1
  },
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "text"
  },
  "created_at": 1,
  "completed_at": null
}

Retrieve a single PBR execution.

get

Returns the status of one execution submitted with POST /pbr/execute/mesh or POST /pbr/execute/image and, once it finishes, its generated material maps with ready-to-use download URLs, or a typed error if it failed. This is the endpoint you poll after a single submission.

The status moves from QUEUED straight to its terminal value. A single execution does not report RUNNING, so poll for a terminal status rather than waiting for a start signal.

This endpoint serves single submissions only. The items of a batch are read with GET /batch/{batch_id}.

Authorizations
AuthorizationstringRequired

API key created in the Marso Studio dashboard. The value has the form mxr_live_<entropy> and is sent as a Bearer token in the Authorization header.

Path parameters
execution_idstring · uuidRequired

Unique identifier of the execution.

Responses
200

The status and final result of the execution.

application/json

Body returned by POST /pbr/execute/* (202) and GET /pbr/executions/{execution_id} (200). It describes one execution and is not a batch envelope: there is no batch ID, no counts, and no items array.

On submission every result field is empty, because nothing has finished yet. asset_id is the source asset you submitted, so a failed execution is always traceable to its input. pbr_material_assets maps each "<slot>/<pass>" to its generated texture asset and a ready-to-use download_url, and usdz is the textured 3D model of a succeeded mesh execution. thumbnail_url is a preview image, always present on a succeeded mesh execution, and best-effort on a succeeded image execution. error is set only when the execution failed.

execution_idstringRequired

Unique identifier of the execution. Poll it at GET /pbr/executions/{execution_id}.

asset_idstringOptional

The ID of the source asset that was submitted.

statusstring · enumRequired

Status of a single item within a batch.

Possible enum values:

  • QUEUED: the item is waiting to start.
  • RUNNING: the item is being processed.
  • SUCCEEDED: the item completed successfully.
  • PARTIAL_SUCCEEDED: the item completed but some optional outputs are missing.
  • FAILED: the item failed. See the error field for details.
  • CANCELED: the item stopped without producing a result, and any credits held for it are returned. Submit the request again to retry it.
Possible values:
thumbnail_urlstring · uriOptional

URL of a preview image. Always present on a succeeded mesh execution; best-effort on a succeeded image execution.

thumbnail_url_expires_atinteger · int64Optional

Time represented as milliseconds since the Unix epoch.

created_atinteger · int64Required

Time represented as milliseconds since the Unix epoch.

completed_atinteger · nullableOptional

Time represented as milliseconds since the Unix epoch, or null when the field has not been set.

get/pbr/executions/{execution_id}
GET /api/public/v1/pbr/executions/{execution_id} HTTP/1.1
Host: api.marso.app/
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "execution_id": "text",
  "asset_id": "text",
  "status": "QUEUED",
  "thumbnail_url": "https://example.com",
  "thumbnail_url_expires_at": 1,
  "pbr_material_assets": {
    "ANY_ADDITIONAL_PROPERTY": {
      "asset_id": "text",
      "download_url": "https://example.com",
      "expires_at": 1
    }
  },
  "usdz": {
    "asset_id": "text",
    "download_url": "https://example.com",
    "expires_at": 1
  },
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "text"
  },
  "created_at": 1,
  "completed_at": null
}

Last updated