> 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/creating-assets/assets-standard.md).

# Standard asset

`POST /v1/assets/standard`

The fast, one-to-one path: one image or text description in, one sim-ready asset out. No metric scale.

## Input

| Field                      | Notes                                                                                                                                                                                   |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `inputs.images`            | Exactly **one** image — an HTTPS `url` or inline base64 `data`; ≤ 100 MB, PNG, JPEG or WebP (checked from the file's bytes). Provide this or `inputs.text`: both or neither is a `422`. |
| `inputs.text`              | A nonblank object description (1–10,000 chars), used to generate a starting image. Provide this or one image.                                                                           |
| `name`                     | Display label (≤ 100 chars), sanitised into the export mesh filename.                                                                                                                   |
| `params`                   | Optional output settings; see [Parameters that apply](#parameters-that-apply).                                                                                                          |
| `Idempotency-Key` (header) | Makes a retry safe; same key + different body ⇒ `409`.                                                                                                                                  |

`inputs.capture` is **not accepted** here — sending it is a `422`. For measured real-world scale, use the [measured asset](/creating-assets/assets-measured.md) route.

An inline image is checked at create, so one that isn't PNG, JPEG or WebP is a `422`; an image given by URL is fetched by the job instead, and a URL that fails or doesn't hold a supported image fails that job. The whole request body is capped at 832 MB (`413` `request-too-large`). If your account has a lifetime asset limit, a create that would cross it returns `429` `asset-limit-reached` — see [Account limit](/guides/jobs-and-assets.md#account-limit).

## Parameters that apply

`mesh`, `texture`, and `physics` all apply. See [Parameters](/creating-assets/parameters.md) for what each does and how to choose.

## Example

Install the generated Python SDK and set `PROJECTSIM_TOKEN` as shown in the [Quickstart](/getting-started/quickstart.md).

{% tabs %}
{% tab title="Python" %}

```python
import os
import uuid

import httpx
from projectsim import AuthenticatedClient
from projectsim.api.assets import create_asset_standard
from projectsim.models import (
    AssetInputs,
    CreateAssetRequest,
    ImageInput,
    Params,
    PhysicsParams,
)

client = AuthenticatedClient(
    base_url="https://api.projectsim.ai",
    token=os.environ["PROJECTSIM_TOKEN"],
    timeout=httpx.Timeout(30.0),
    raise_on_unexpected_status=True,
)

body = CreateAssetRequest(
    name='office chair',
    inputs=AssetInputs(
        images=[ImageInput(
            url='https://example.com/chair.png',
        )],
    ),
    params=Params(
        physics=PhysicsParams(
            simulator='isaac_sim_physx',
        ),
    ),
)

with client:
    response = create_asset_standard.sync_detailed(
        client=client,
        body=body,
        idempotency_key=str(uuid.uuid4()),
    )
if response.status_code != 202:
    raise RuntimeError(response.content.decode("utf-8"))
created = response.parsed
if created is None:
    raise RuntimeError("The API returned an empty response")
print(created.job_id)
```

{% endtab %}

{% tab title="cURL" %}

```bash
curl -X POST "https://api.projectsim.ai/v1/assets/standard" \
  -H "Authorization: Bearer $PROJECTSIM_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "name": "office chair",
    "inputs": { "images": [{ "url": "https://example.com/chair.png" }] },
    "params": { "physics": { "simulator": "isaac_sim_physx" } }
  }'
```

{% endtab %}
{% endtabs %}

Returns `202` with `id`, `job_id`, `status`, and the resolved `effective_params`. Then poll the job and download — see the [Quickstart](/getting-started/quickstart.md) for the full three-call flow, and [Jobs & assets](/guides/jobs-and-assets.md) for the async model.

The full field-by-field schema is in the auto-generated **API reference** under `assets`.
