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

> 34 revisions in range; 1 could not be searched.

- **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/0a3cd7959546/schema)
