---
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

---

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