> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hardlightsim.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Asset ID Inputs

> Use stable asset identifiers instead of raw storage URIs.

## Why Asset IDs

Asset IDs let customers reuse uploaded robot/scene/checkpoint files without embedding raw storage URIs in every payload.

## API Flow

1. `POST /v0/inputs/presign-upload` with `register_asset=true`
2. Upload bytes to returned signed URL
3. Use returned `asset_id` in job or training payload

Optional explicit registration path:

* `POST /v0/assets/register` for an existing managed input URI
* `GET /v0/assets` / `GET /v0/assets/{asset_id}` for discovery

## Job Payload Fields

* `robot.urdf_asset_id`
* `robot.usd_asset_id`
* `scene.usd_asset_id`

## Training Payload Fields

* `checkpoint_init_asset_id`
* `rollout_template.job_template` can include the same robot/scene `*_asset_id` fields

## SDK Flow

```python theme={null}
import hardsim as hs

client = hs.HardsimClient.from_env()

robot_asset_id = client.upload_input_asset("./assets/franka.urdf", asset_kind="robot")
scene_asset_id = client.upload_input_asset("./assets/scene.usd", asset_kind="scene")

job = client.submit_assets(
    robot_asset_id=robot_asset_id,
    scene_asset_id=scene_asset_id,
    robot_asset_type="urdf",
    num_envs=8,
    steps=600,
)
```

## Compatibility

URI-based payloads still work for backward compatibility. Asset IDs are the recommended abstraction layer.
