> For the complete documentation index, see [llms.txt](https://docs.projectsim.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.projectsim.ai/api-reference/batches.md).

# Batches

## Create Batch Measured

> Create a batch with metric scale from ChArUco capture videos.\
> \
> Each item requires one image and one capture video; text is not accepted.\
> Uses the standard batch response and idempotency rules.

```json
{"openapi":"3.1.0","info":{"title":"projectsim API","version":"1.0.0-beta"},"security":[{"ProjectSimToken":[]}],"components":{"securitySchemes":{"ProjectSimToken":{"bearerFormat":"kps_live_...","description":"A per-user API token. The tenant is the user, so no request body carries a user id. Tokens without the `kps_` prefix are rejected before any lookup.","scheme":"bearer","type":"http"}},"schemas":{"CreateMeasuredAssetsRequest":{"additionalProperties":false,"properties":{"items":{"description":"The measured assets to create, 1-100.","items":{"$ref":"#/components/schemas/CreateMeasuredAssetRequest"},"maxItems":100,"minItems":1,"title":"Items","type":"array"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"title":"Name"}},"required":["items"],"title":"CreateMeasuredAssetsRequest","type":"object"},"CreateMeasuredAssetRequest":{"additionalProperties":false,"properties":{"inputs":{"$ref":"#/components/schemas/MeasuredAssetInputs"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"title":"Name"},"params":{"anyOf":[{"$ref":"#/components/schemas/Params"},{"type":"null"}]}},"required":["inputs"],"title":"CreateMeasuredAssetRequest","type":"object"},"MeasuredAssetInputs":{"additionalProperties":false,"description":"Exactly one subject image and one capture video.","properties":{"capture":{"description":"Exactly one video clip (MP4 or MOV) of the object next to a printed ChArUco board, by HTTPS URL or inline as base64.","items":{"$ref":"#/components/schemas/CaptureInput"},"maxItems":1,"minItems":1,"title":"Capture","type":"array"},"images":{"items":{"$ref":"#/components/schemas/ImageInput"},"maxItems":1,"minItems":1,"title":"Images","type":"array"}},"required":["images","capture"],"title":"MeasuredAssetInputs","type":"object"},"CaptureInput":{"additionalProperties":false,"description":"One video clip of the object beside a ChArUco board.\n\nThe measurement reference for `POST /v1/assets/measured`: the object\nstands on the floor next to the printed board and is filmed in one clip\nwalking around it. The clip comes either by HTTPS URL or inline as\nbase64, exactly one of the two.","properties":{"data":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The capture video (MP4 or MOV) as base64, up to 500 MB decoded. Stored as part of the create call, so a payload that is not a supported clip is a `422` here rather than a failed job. Inflates the request by a third: prefer `url` for a large clip.","title":"Data"},"url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"description":"HTTPS URL of the capture video (MP4 or MOV).","title":"Url"}},"title":"CaptureInput","type":"object"},"ImageInput":{"additionalProperties":false,"properties":{"data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data"},"url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"title":"Url"}},"title":"ImageInput","type":"object"},"Params":{"additionalProperties":false,"properties":{"mesh":{"$ref":"#/components/schemas/MeshParams","default":{"quality":"standard"}},"physics":{"$ref":"#/components/schemas/PhysicsParams","default":{"body":"rigid","collision":"auto","simulator":"isaac_sim_physx"}},"texture":{"$ref":"#/components/schemas/TextureParams","default":{"resolution":4096}},"variation":{"$ref":"#/components/schemas/VariationParams","default":{"variation_type":"general","wildness":"moderate"}}},"title":"Params","type":"object"},"MeshParams":{"additionalProperties":false,"properties":{"quality":{"default":"standard","enum":["standard","low","ultra_low"],"title":"Quality","type":"string"}},"title":"MeshParams","type":"object"},"PhysicsParams":{"additionalProperties":false,"properties":{"body":{"default":"rigid","description":"Physical behavior of the bodies: rigid preserves shape; deformable uses soft-body simulation.","enum":["rigid","deformable"],"title":"Body","type":"string"},"collision":{"default":"auto","enum":["auto","convex_hull","convex_decomposition","coacd","bounding_box","sdf"],"title":"Collision","type":"string"},"simulator":{"default":"isaac_sim_physx","description":"Target runtime. Native formats and physics engine are derived internally; agnostic delivers FBX and GLB plus physics sidecar.","enum":["isaac_sim_physx","isaac_sim_newton","mujoco","sapien","genesis","agnostic"],"title":"Simulator","type":"string"}},"title":"PhysicsParams","type":"object"},"TextureParams":{"additionalProperties":false,"properties":{"resolution":{"default":4096,"enum":[1024,2048,4096,8192],"title":"Resolution","type":"integer"}},"title":"TextureParams","type":"object"},"VariationParams":{"additionalProperties":false,"description":"How an image-method set's variants are generated. Ignored otherwise.\n\nA deliberate subset of the generator's options: what a customer steers,\nnot how many images it makes. Count is the set's `count`, one image per\nmember, so it is not reachable from here. The generator's custom prompt\nis not steered here either — it comes from the set's `seed.text` — and\nthe subject name comes from the set's `name`.","properties":{"variation_type":{"default":"general","enum":["texture","general"],"title":"Variation Type","type":"string"},"wildness":{"default":"moderate","enum":["subtle","moderate","bold","wild"],"title":"Wildness","type":"string"}},"title":"VariationParams","type":"object"},"CreateAssetsResponse":{"description":"The created assets, in the order they were sent.","properties":{"assets":{"items":{"$ref":"#/components/schemas/CreateAssetResponse"},"title":"Assets","type":"array"},"id":{"title":"Id","type":"string"},"job_id":{"title":"Job Id","type":"string"},"status_url":{"title":"Status Url","type":"string"}},"required":["id","job_id","status_url","assets"],"title":"CreateAssetsResponse","type":"object"},"CreateAssetResponse":{"properties":{"effective_params":{"additionalProperties":true,"title":"Effective Params","type":"object"},"id":{"title":"Id","type":"string"},"job_id":{"title":"Job Id","type":"string"},"status":{"title":"Status","type":"string"}},"required":["id","job_id","status","effective_params"],"title":"CreateAssetResponse","type":"object"},"Problem":{"description":"An RFC 7807 error, the shape every failure uses.\n\nDeclared explicitly because the handlers replace FastAPI's default\nvalidation response; without this the spec would advertise\n`HTTPValidationError`, whose `detail` is a list rather than a string,\nand every generated client would crash parsing a 422.","properties":{"detail":{"description":"Human-readable explanation of this occurrence.","title":"Detail","type":"string"},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/ValidationDetail"},"type":"array"},{"type":"null"}],"description":"Present on a 422; one entry per failing field.","title":"Errors"},"instance":{"description":"Identifies this occurrence; quote it to support.","title":"Instance","type":"string"},"path":{"title":"Path","type":"string"},"request_id":{"description":"Also returned in the X-Request-Id response header.","title":"Request Id","type":"string"},"status":{"title":"Status","type":"integer"},"title":{"title":"Title","type":"string"},"type":{"description":"Stable URI identifying the error class.","title":"Type","type":"string"}},"required":["type","title","status","detail","instance","path","request_id"],"title":"Problem","type":"object"},"ValidationDetail":{"description":"One field-level validation failure.","properties":{"loc":{"description":"Dotted path to the offending field.","title":"Loc","type":"string"},"msg":{"title":"Msg","type":"string"},"type":{"title":"Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationDetail","type":"object"}}},"paths":{"/v1/batches/measured":{"post":{"description":"Create a batch with metric scale from ChArUco capture videos.\n\nEach item requires one image and one capture video; text is not accepted.\nUses the standard batch response and idempotency rules.","operationId":"create_batch_measured","parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMeasuredAssetsRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetsResponse"}}},"description":"Successful Response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Missing or invalid API token"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not enough credits. `payment-required`: no card on file yet (the first 40 credits are free, but a card is required before the first request), a failed payment, or an ended subscription; fix it in the dashboard. `overage-cap-reached`: this period's overage cap would be exceeded (the detail says how many credits are left); requests resume when credits reset on the billing date, or change the cap in the dashboard. `credit-limit-reached` (accounts invoiced by Kaedim): the request needs more than is left of this month's included credits and any overage allowance (the detail says how many are left); send a smaller request, wait for next month (UTC), or contact Kaedim for more. Nothing is created or reserved."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Idempotency key reused with a different request"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request body too large"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed validation"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Account asset limit reached"}},"summary":"Create Batch Measured","tags":["batches"]}}}}
```

## Create Batch Standard

> Create a batch from one image or text description per item.\
> \
> Returns the batch \`id\`, parent \`job\_id\`, \`status\_url\`, and ordered assets.\
> Poll \`/v1/batches/{id}\` for progress and \`/v1/batches/{id}/assets\` for results.\
> One \`Idempotency-Key\` covers the batch; invalid items reject the request.

```json
{"openapi":"3.1.0","info":{"title":"projectsim API","version":"1.0.0-beta"},"security":[{"ProjectSimToken":[]}],"components":{"securitySchemes":{"ProjectSimToken":{"bearerFormat":"kps_live_...","description":"A per-user API token. The tenant is the user, so no request body carries a user id. Tokens without the `kps_` prefix are rejected before any lookup.","scheme":"bearer","type":"http"}},"schemas":{"CreateAssetsRequest":{"additionalProperties":false,"description":"List-based creation for the batch endpoints; single-asset requests are unchanged.","properties":{"items":{"description":"The assets to create, 1-100.","items":{"$ref":"#/components/schemas/CreateAssetRequest"},"maxItems":100,"minItems":1,"title":"Items","type":"array"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"title":"Name"}},"required":["items"],"title":"CreateAssetsRequest","type":"object"},"CreateAssetRequest":{"additionalProperties":false,"properties":{"inputs":{"$ref":"#/components/schemas/AssetInputs"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"title":"Name"},"params":{"anyOf":[{"$ref":"#/components/schemas/Params"},{"type":"null"}]}},"required":["inputs"],"title":"CreateAssetRequest","type":"object"},"AssetInputs":{"additionalProperties":false,"properties":{"images":{"items":{"$ref":"#/components/schemas/ImageInput"},"maxItems":1,"title":"Images","type":"array"},"text":{"anyOf":[{"maxLength":10000,"minLength":1,"pattern":"\\S","type":"string"},{"type":"null"}],"description":"Object description used to generate a starting reference image. Provide either text or one image, not both.","title":"Text"}},"title":"AssetInputs","type":"object"},"ImageInput":{"additionalProperties":false,"properties":{"data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data"},"url":{"anyOf":[{"format":"uri","maxLength":2083,"minLength":1,"type":"string"},{"type":"null"}],"title":"Url"}},"title":"ImageInput","type":"object"},"Params":{"additionalProperties":false,"properties":{"mesh":{"$ref":"#/components/schemas/MeshParams","default":{"quality":"standard"}},"physics":{"$ref":"#/components/schemas/PhysicsParams","default":{"body":"rigid","collision":"auto","simulator":"isaac_sim_physx"}},"texture":{"$ref":"#/components/schemas/TextureParams","default":{"resolution":4096}},"variation":{"$ref":"#/components/schemas/VariationParams","default":{"variation_type":"general","wildness":"moderate"}}},"title":"Params","type":"object"},"MeshParams":{"additionalProperties":false,"properties":{"quality":{"default":"standard","enum":["standard","low","ultra_low"],"title":"Quality","type":"string"}},"title":"MeshParams","type":"object"},"PhysicsParams":{"additionalProperties":false,"properties":{"body":{"default":"rigid","description":"Physical behavior of the bodies: rigid preserves shape; deformable uses soft-body simulation.","enum":["rigid","deformable"],"title":"Body","type":"string"},"collision":{"default":"auto","enum":["auto","convex_hull","convex_decomposition","coacd","bounding_box","sdf"],"title":"Collision","type":"string"},"simulator":{"default":"isaac_sim_physx","description":"Target runtime. Native formats and physics engine are derived internally; agnostic delivers FBX and GLB plus physics sidecar.","enum":["isaac_sim_physx","isaac_sim_newton","mujoco","sapien","genesis","agnostic"],"title":"Simulator","type":"string"}},"title":"PhysicsParams","type":"object"},"TextureParams":{"additionalProperties":false,"properties":{"resolution":{"default":4096,"enum":[1024,2048,4096,8192],"title":"Resolution","type":"integer"}},"title":"TextureParams","type":"object"},"VariationParams":{"additionalProperties":false,"description":"How an image-method set's variants are generated. Ignored otherwise.\n\nA deliberate subset of the generator's options: what a customer steers,\nnot how many images it makes. Count is the set's `count`, one image per\nmember, so it is not reachable from here. The generator's custom prompt\nis not steered here either — it comes from the set's `seed.text` — and\nthe subject name comes from the set's `name`.","properties":{"variation_type":{"default":"general","enum":["texture","general"],"title":"Variation Type","type":"string"},"wildness":{"default":"moderate","enum":["subtle","moderate","bold","wild"],"title":"Wildness","type":"string"}},"title":"VariationParams","type":"object"},"CreateAssetsResponse":{"description":"The created assets, in the order they were sent.","properties":{"assets":{"items":{"$ref":"#/components/schemas/CreateAssetResponse"},"title":"Assets","type":"array"},"id":{"title":"Id","type":"string"},"job_id":{"title":"Job Id","type":"string"},"status_url":{"title":"Status Url","type":"string"}},"required":["id","job_id","status_url","assets"],"title":"CreateAssetsResponse","type":"object"},"CreateAssetResponse":{"properties":{"effective_params":{"additionalProperties":true,"title":"Effective Params","type":"object"},"id":{"title":"Id","type":"string"},"job_id":{"title":"Job Id","type":"string"},"status":{"title":"Status","type":"string"}},"required":["id","job_id","status","effective_params"],"title":"CreateAssetResponse","type":"object"},"Problem":{"description":"An RFC 7807 error, the shape every failure uses.\n\nDeclared explicitly because the handlers replace FastAPI's default\nvalidation response; without this the spec would advertise\n`HTTPValidationError`, whose `detail` is a list rather than a string,\nand every generated client would crash parsing a 422.","properties":{"detail":{"description":"Human-readable explanation of this occurrence.","title":"Detail","type":"string"},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/ValidationDetail"},"type":"array"},{"type":"null"}],"description":"Present on a 422; one entry per failing field.","title":"Errors"},"instance":{"description":"Identifies this occurrence; quote it to support.","title":"Instance","type":"string"},"path":{"title":"Path","type":"string"},"request_id":{"description":"Also returned in the X-Request-Id response header.","title":"Request Id","type":"string"},"status":{"title":"Status","type":"integer"},"title":{"title":"Title","type":"string"},"type":{"description":"Stable URI identifying the error class.","title":"Type","type":"string"}},"required":["type","title","status","detail","instance","path","request_id"],"title":"Problem","type":"object"},"ValidationDetail":{"description":"One field-level validation failure.","properties":{"loc":{"description":"Dotted path to the offending field.","title":"Loc","type":"string"},"msg":{"title":"Msg","type":"string"},"type":{"title":"Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationDetail","type":"object"}}},"paths":{"/v1/batches/standard":{"post":{"description":"Create a batch from one image or text description per item.\n\nReturns the batch `id`, parent `job_id`, `status_url`, and ordered assets.\nPoll `/v1/batches/{id}` for progress and `/v1/batches/{id}/assets` for results.\nOne `Idempotency-Key` covers the batch; invalid items reject the request.","operationId":"create_batch_standard","parameters":[{"in":"header","name":"Idempotency-Key","required":false,"schema":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetsRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAssetsResponse"}}},"description":"Successful Response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Missing or invalid API token"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not enough credits. `payment-required`: no card on file yet (the first 40 credits are free, but a card is required before the first request), a failed payment, or an ended subscription; fix it in the dashboard. `overage-cap-reached`: this period's overage cap would be exceeded (the detail says how many credits are left); requests resume when credits reset on the billing date, or change the cap in the dashboard. `credit-limit-reached` (accounts invoiced by Kaedim): the request needs more than is left of this month's included credits and any overage allowance (the detail says how many are left); send a smaller request, wait for next month (UTC), or contact Kaedim for more. Nothing is created or reserved."},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Idempotency key reused with a different request"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request body too large"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed validation"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Account asset limit reached"}},"summary":"Create Batch Standard","tags":["batches"]}}}}
```

## Get Batch

> Poll all members in one request. ZIP bundles are not available yet.

```json
{"openapi":"3.1.0","info":{"title":"projectsim API","version":"1.0.0-beta"},"security":[{"ProjectSimToken":[]}],"components":{"securitySchemes":{"ProjectSimToken":{"bearerFormat":"kps_live_...","description":"A per-user API token. The tenant is the user, so no request body carries a user id. Tokens without the `kps_` prefix are rejected before any lookup.","scheme":"bearer","type":"http"}},"schemas":{"BatchDetail":{"properties":{"count":{"title":"Count","type":"integer"},"counts":{"$ref":"#/components/schemas/MemberCounts"},"created_at":{"format":"date-time","title":"Created At","type":"string"},"id":{"title":"Id","type":"string"},"job_id":{"title":"Job Id","type":"string"},"manifest":{"anyOf":[{"$ref":"#/components/schemas/ManifestRef"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"progress":{"description":"Terminal member count / requested count; not a success rate.","title":"Progress","type":"number"},"status":{"title":"Status","type":"string"}},"required":["id","job_id","count","status","counts","progress","created_at"],"title":"BatchDetail","type":"object"},"MemberCounts":{"description":"Derived from the member jobs on every read, so it never drifts.","properties":{"canceled":{"default":0,"title":"Canceled","type":"integer"},"complete":{"title":"Complete","type":"integer"},"failed":{"title":"Failed","type":"integer"},"queued":{"title":"Queued","type":"integer"},"requested":{"title":"Requested","type":"integer"},"running":{"title":"Running","type":"integer"}},"required":["requested","queued","running","complete","failed"],"title":"MemberCounts","type":"object"},"ManifestRef":{"properties":{"expires_at":{"format":"date-time","title":"Expires At","type":"string"},"url":{"description":"Presigned GET, valid for 24 hours.","title":"Url","type":"string"}},"required":["url","expires_at"],"title":"ManifestRef","type":"object"},"Problem":{"description":"An RFC 7807 error, the shape every failure uses.\n\nDeclared explicitly because the handlers replace FastAPI's default\nvalidation response; without this the spec would advertise\n`HTTPValidationError`, whose `detail` is a list rather than a string,\nand every generated client would crash parsing a 422.","properties":{"detail":{"description":"Human-readable explanation of this occurrence.","title":"Detail","type":"string"},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/ValidationDetail"},"type":"array"},{"type":"null"}],"description":"Present on a 422; one entry per failing field.","title":"Errors"},"instance":{"description":"Identifies this occurrence; quote it to support.","title":"Instance","type":"string"},"path":{"title":"Path","type":"string"},"request_id":{"description":"Also returned in the X-Request-Id response header.","title":"Request Id","type":"string"},"status":{"title":"Status","type":"integer"},"title":{"title":"Title","type":"string"},"type":{"description":"Stable URI identifying the error class.","title":"Type","type":"string"}},"required":["type","title","status","detail","instance","path","request_id"],"title":"Problem","type":"object"},"ValidationDetail":{"description":"One field-level validation failure.","properties":{"loc":{"description":"Dotted path to the offending field.","title":"Loc","type":"string"},"msg":{"title":"Msg","type":"string"},"type":{"title":"Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationDetail","type":"object"}}},"paths":{"/v1/batches/{id}":{"get":{"description":"Poll all members in one request. ZIP bundles are not available yet.","operationId":"get_batch","parameters":[{"in":"path","name":"id","required":true,"schema":{"title":"Id","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchDetail"}}},"description":"Successful Response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Missing or invalid API token"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Batch not found"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request body too large"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed validation"}},"summary":"Get Batch","tags":["batches"]}}}}
```

## List Batch Assets

> Page through members and download URLs in stable batch\_index order.\
> \
> The cursor is the last index from the preceding page. Status filtering\
> does not renumber members. Deleted assets are omitted from this listing;\
> the batch counts and manifest retain their original execution outcomes.

```json
{"openapi":"3.1.0","info":{"title":"projectsim API","version":"1.0.0-beta"},"security":[{"ProjectSimToken":[]}],"components":{"securitySchemes":{"ProjectSimToken":{"bearerFormat":"kps_live_...","description":"A per-user API token. The tenant is the user, so no request body carries a user id. Tokens without the `kps_` prefix are rejected before any lookup.","scheme":"bearer","type":"http"}},"schemas":{"BatchMemberList":{"properties":{"members":{"items":{"$ref":"#/components/schemas/BatchMember"},"title":"Members","type":"array"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Last batch_index on the page; null when done.","title":"Next Cursor"}},"required":["members"],"title":"BatchMemberList","type":"object"},"BatchMember":{"properties":{"asset_id":{"title":"Asset Id","type":"string"},"batch_index":{"description":"Stable input order, starting at 1.","title":"Batch Index","type":"integer"},"current_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Stage"},"error":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error"},"files":{"items":{"$ref":"#/components/schemas/MemberFileEntry"},"title":"Files","type":"array"},"job_id":{"title":"Job Id","type":"string"},"status":{"title":"Status","type":"string"}},"required":["batch_index","asset_id","job_id","status","files"],"title":"BatchMember","type":"object"},"MemberFileEntry":{"description":"A member's deliverable with a fresh download URL.","properties":{"expires_at":{"format":"date-time","title":"Expires At","type":"string"},"kind":{"title":"Kind","type":"string"},"path":{"description":"Where the file sits in the member's deliverable folder, relative to it. A USD references its textures by these paths, so lay the files out this way to open it textured.","title":"Path","type":"string"},"url":{"description":"Presigned GET, valid for 24 hours.","title":"Url","type":"string"}},"required":["kind","path","url","expires_at"],"title":"MemberFileEntry","type":"object"},"Problem":{"description":"An RFC 7807 error, the shape every failure uses.\n\nDeclared explicitly because the handlers replace FastAPI's default\nvalidation response; without this the spec would advertise\n`HTTPValidationError`, whose `detail` is a list rather than a string,\nand every generated client would crash parsing a 422.","properties":{"detail":{"description":"Human-readable explanation of this occurrence.","title":"Detail","type":"string"},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/ValidationDetail"},"type":"array"},{"type":"null"}],"description":"Present on a 422; one entry per failing field.","title":"Errors"},"instance":{"description":"Identifies this occurrence; quote it to support.","title":"Instance","type":"string"},"path":{"title":"Path","type":"string"},"request_id":{"description":"Also returned in the X-Request-Id response header.","title":"Request Id","type":"string"},"status":{"title":"Status","type":"integer"},"title":{"title":"Title","type":"string"},"type":{"description":"Stable URI identifying the error class.","title":"Type","type":"string"}},"required":["type","title","status","detail","instance","path","request_id"],"title":"Problem","type":"object"},"ValidationDetail":{"description":"One field-level validation failure.","properties":{"loc":{"description":"Dotted path to the offending field.","title":"Loc","type":"string"},"msg":{"title":"Msg","type":"string"},"type":{"title":"Type","type":"string"}},"required":["loc","msg","type"],"title":"ValidationDetail","type":"object"}}},"paths":{"/v1/batches/{id}/assets":{"get":{"description":"Page through members and download URLs in stable batch_index order.\n\nThe cursor is the last index from the preceding page. Status filtering\ndoes not renumber members. Deleted assets are omitted from this listing;\nthe batch counts and manifest retain their original execution outcomes.","operationId":"list_batch_assets","parameters":[{"in":"path","name":"id","required":true,"schema":{"title":"Id","type":"string"}},{"in":"query","name":"status","required":false,"schema":{"anyOf":[{"enum":["queued","running","complete","failed","canceled"],"type":"string"},{"type":"null"}],"title":"Status"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"cursor","required":false,"schema":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchMemberList"}}},"description":"Successful Response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Missing or invalid API token"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Batch not found"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request body too large"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed validation"}},"summary":"List Batch Assets","tags":["batches"]}}}}
```
