---
title: "Retry a signed asset upload"
method: POST
path: "/assets/{assetId}/retry"
tags: ["Assets"]
---

# Retry a signed asset upload

`POST /assets/{assetId}/retry`

## Request

- Base URL: `https://app.flora.ai/api/v1`
- URL: `https://app.flora.ai/api/v1/assets/{assetId}/retry`
- Auth: HTTP bearer

Creates a fresh signed upload reservation for a failed or expired asset upload. Mutating public API requests support an optional Idempotency-Key header for client retries; duplicate keys within two hours return idempotency_duplicate.

## Path parameters

- `assetId` string, required: Asset identifier

## Response `200`

Asset upload retry created.

- object
  - `asset_id` string, required: Asset identifier
  - `url` string, uri, nullable, required: Asset URL
  - `workspace_id` string, nullable, required: Workspace identifier
  - `visibility` 'workspace', required
  - `status` 'pending_upload' | 'ready' | 'failed', required
  - `failure_message` string, nullable: Failure message when the asset is in failed status
  - `upload` union
    - object
      - `url` string, uri, required: Upload URL
      - `method` 'POST', required
      - `content_type` 'multipart/form-data', required
      - `file_field` 'file', required
      - `form_fields` object, required: Upload form fields
    - object
      - `url` string, uri, required: Resumable upload session URL
      - `method` 'PUT', required
      - `content_type` 'model/gltf-binary', required
      - `headers` object, required: Required upload headers
  - `upload_url` string: Upload URL (serialized)
  - `expires_at` string, date-time: Expiration time for the upload URL

## Other responses

- `400`: 400
- `401`: 401
- `402`: 402
- `403`: 403
- `404`: 404
- `409`: 409
- `429`: 429
- `500`: 500
- `503`: 503

## Changes

- **2026-10-28** `a8351619f225`: 9 warning
  - added the new `not_configured` enum value to the `error/code` response property for the response status `400`
  - added the new `not_configured` enum value to the `error/code` response property for the response status `401`
  - added the new `not_configured` enum value to the `error/code` response property for the response status `402`
  - added the new `not_configured` enum value to the `error/code` response property for the response status `403`
  - …5 more
- **2026-10-20** `d7653e24b083`: 6 breaking, 1 info
  - the `upload` response's property type changed from `object` to no type for status `200`
  - removed the required property `upload/content_type` from the response with the `200` status
  - removed the required property `upload/file_field` from the response with the `200` status
  - removed the required property `upload/form_fields` from the response with the `200` status
  - …3 more
- **2026-10-16** `e54130373b10`: 24 warning, 17 info
  - added the new `paid_plan_required` enum value to the `error/code` response property for the response status `400`
  - added the new `paid_plan_required` enum value to the `error/code` response property for the response status `401`
  - added the new `paid_plan_required` enum value to the `error/code` response property for the response status `402`
  - added the new `paid_plan_required` enum value to the `error/code` response property for the response status `403`
  - …37 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/florafauna-ai/apis/flora-ai-api/changes/assets/:assetId/retry/post.md)

---

[API](https://skmtc.dev/florafauna-ai/apis/flora-ai-api.md) - [All operations](https://skmtc.dev/florafauna-ai/apis/flora-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/florafauna-ai/apis/flora-ai-api/revisions/87cfe2c4ac29?raw)
