---
title: "Generate Upload URL"
method: POST
path: "/v2/assets/upload-url"
tags: ["Assets V2"]
---

# Generate Upload URL

`POST /v2/assets/upload-url`

Generates a presigned URL for uploading an asset file. Upload the file via PUT to the returned URL, then create the asset record. Requires assets:write scope.

## Request body

- object
  - `project_id` string — ID of the project to upload the asset for
  - `application_id` string, required — ID of the application
  - `file_name` string, required — Original file name
  - `content_type` string, required

## Response `200`

Success

- object
  - `upload_url` string, required — Presigned URL to PUT the file to
  - `key` string, required — Storage key for the uploaded file
  - `public_url` string, required — Public URL where the asset will be accessible after upload

## Other responses

- `400` — The request did not match the expected schema
- `401` — No API key was provided in the request
- `403` — The API key does not have permission to perform this action
- `404` — The requested resource was not found
- `429` — Too many requests have been made in a short period
- `500` — An unexpected error occurred on the server

---

[API](https://skmtc.dev/superwall/apis/superwall-api-v2.md) · [All operations](https://skmtc.dev/superwall/apis/superwall-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/superwall/superwall-api-v2/revisions/44900ad77d2c/schema)
