# PresignUploadUrlOptions

```ts
type PresignUploadUrlOptions = {
  bytes: number;
  clientOriginalBytes?: number;
  fileName: string;
  mime: string;
  presets?: RequestablePreset[];
  sha256: string;
  video?: UploadVideoOptions;
};
```

Defined in: packages/sdk/src/index.ts:512

Input shape accepted by `aq.assets.presignUploadUrl(...)`.

## Properties

### bytes

```ts
bytes: number;
```

Defined in: packages/sdk/src/index.ts:518

Byte length of the upload payload.

***

### clientOriginalBytes?

```ts
optional clientOriginalBytes?: number;
```

Defined in: packages/sdk/src/index.ts:534

Pre-compression size of the source (useful when the browser ran
compressorjs / heic2any before computing `bytes`). Recorded
server-side, so the savings show up in the admin usage dashboards.

***

### fileName

```ts
fileName: string;
```

Defined in: packages/sdk/src/index.ts:520

Suggested file name; surfaces in admin dashboards + extension fallback.

***

### mime

```ts
mime: string;
```

Defined in: packages/sdk/src/index.ts:516

MIME type of the bytes (e.g. `image/jpeg`, `video/mp4`).

***

### presets?

```ts
optional presets?: RequestablePreset[];
```

Defined in: packages/sdk/src/index.ts:528

Variant ladder to generate after `/assets/process`. Defaults to
`["original"]` server-side when omitted — same contract as `aq.upload`.

[RequestablePreset](/api/nitida/sdk/type-aliases/requestablepreset/), not [VariantPreset](/api/nitida/sdk/type-aliases/variantpreset/): `hls` and `mp3` are
things a variant can BE, never things you can ask for, and asking is a 400.

***

### sha256

```ts
sha256: string;
```

Defined in: packages/sdk/src/index.ts:514

Full sha256 (64 hex) of the bytes that will be PUT to storage.

***

### video?

```ts
optional video?: UploadVideoOptions;
```

Defined in: packages/sdk/src/index.ts:536

VIDEO-only delivery knobs forwarded into `/assets/process`. See [UploadVideoOptions](/api/nitida/sdk/type-aliases/uploadvideooptions/).