---
title: "Creates an asset and returns upload and download URLs. If there is a corresponding file uploaded in the storage with given name, its MD5 is returned so you can check if a re-upload is necessary. If no MD5 is returned, then there is no corresponding file in the storage so downloading it directly or using it in instances will fail until you use the returned upload URL to submit the file."
method: PUT
path: "/v1/assets"
---

# Creates an asset and returns upload and download URLs. If there is a corresponding file uploaded in the storage with given name, its MD5 is returned so you can check if a re-upload is necessary. If no MD5 is returned, then there is no corresponding file in the storage so downloading it directly or using it in instances will fail until you use the returned upload URL to submit the file.

`PUT /v1/assets`

## Request body

- AssetPut
  - `name` string, required
  - `kind` 'App' | 'Keychain'
  - `platform` 'ios' | 'android' | 'xcode'
  - `ttl` string — Optional time-to-live as a Go duration string (e.g. "24h"). When set, the asset is deleted this long after now; minimum is 1m. Omit for no expiry. On re-upload of an existing asset, a value updates the expiry while omitting it leaves the current expiry unchanged.

## Response `200`

OK

- AssetPutResult
  - `id` string, required
  - `name` string, required
  - `kind` 'App' | 'Keychain', required
  - `platform` 'ios' | 'android' | 'xcode'
  - `md5` string — Returned only if there is a corresponding file uploaded already.
  - `expiresAt` string, date-time — When set, the time after which the asset is automatically deleted.
  - `signedUploadUrl` string, required
  - `signedDownloadUrl` string, required

## Other responses

- `default` — Error

## Changes

- **2026-07-07** `22f89da81c8f` — 4 info
  - added the new optional request property `kind`
  - added the new optional request property `platform`
  - added the optional property `platform` to the response with the `200` status
  - added the required property `kind` to the response with the `200` status
- **2026-06-18** `22b815649ef7` — 2 info
  - added the new optional request property `ttl`
  - added the optional property `expiresAt` to the response with the `200` status

[Change history](https://skmtc.dev/limrun-inc/apis/limrun-api/changes/v1/assets/put.md)

---

[API](https://skmtc.dev/limrun-inc/apis/limrun-api.md) · [All operations](https://skmtc.dev/limrun-inc/apis/limrun-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/limrun-inc/limrun-api/revisions/22f89da81c8f/schema)
