# Start a presigned upload (/en/reference/media/create-presigned-upload)

OpenAPI operation (components in https://api.tebar.app/v1/openapi.json):

```json
[
  {
    "operationId": "createPresignedUpload",
    "tags": [
      "Media"
    ],
    "summary": "Start a presigned upload",
    "description": "PUT the file to upload_url with exactly the Content-Type and Content-Length in upload_headers (both are signed; a mismatch gets 403 from storage), then call complete.\n\nRequires the write scope.",
    "parameters": [
      {
        "$ref": "#/components/parameters/TebarProfile"
      }
    ],
    "requestBody": {
      "required": true,
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/CreatePresignedUploadRequest"
          }
        }
      }
    },
    "responses": {
      "201": {
        "description": "Where to upload.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/MediaUpload"
            }
          }
        }
      },
      "400": {
        "$ref": "#/components/responses/BadRequest"
      },
      "401": {
        "$ref": "#/components/responses/Unauthorized"
      },
      "403": {
        "$ref": "#/components/responses/Forbidden"
      },
      "429": {
        "$ref": "#/components/responses/RateLimited"
      }
    }
  }
]
```