> ## Documentation Index
> Fetch the complete documentation index at: https://autorender.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# C# / .NET

> Upload files, manage folders, and call the full Autorender API from your .NET server.

The `Autorender` package is the official server-side client for .NET. Use it to upload files, list and manage files and folders, run multipart uploads, and call the Autorender API from your backend.

## Prerequisites

* An Autorender account with an API key — [create one in the dashboard](https://app.autorender.io)
* .NET **6** or later

## Guide

<Steps>
  <Step title="Install the package.">
    <CodeGroup>
      ```bash .NET CLI theme={null}
      dotnet add package Autorender
      ```

      ```xml PackageReference theme={null}
      <PackageReference Include="Autorender" Version="0.3.1" />
      ```
    </CodeGroup>
  </Step>

  <Step title="Set your API key.">
    Create an API key in the dashboard and set it as an environment variable:

    ```bash theme={null}
    export AUTORENDER_API_KEY=your-api-key
    ```

    The client reads `AUTORENDER_API_KEY` from the environment automatically, or you can pass it explicitly — never hardcode the key:

    ```csharp theme={null}
    AutorenderClient client = new() { ApiKey = Environment.GetEnvironmentVariable("AUTORENDER_API_KEY") };
    ```
  </Step>

  <Step title="Upload a file.">
    Create a client and upload your first file:

    ```csharp {8} theme={null}
    using Autorender;
    using System.IO;
    using Autorender.Models.Uploads;

    AutorenderClient client = new();

    await using var file = File.OpenRead("products/chair.jpg");

    var upload = await client.Uploads.Create(new UploadCreateParams
    {
        File = file,
        FileName = "chair.jpg",
    });

    Console.WriteLine(upload.FileNo);  // e.g. "fi_abc123"
    Console.WriteLine(upload.Url);     // CDN URL
    ```
  </Step>
</Steps>

## Examples

### Upload from URL

```csharp theme={null}
using Autorender.Models.Uploads;

var upload = await client.Uploads.CreateFromUrl(new UploadCreateFromUrlParams
{
    RemoteUrl = "https://acme-assets.s3.amazonaws.com/products/chair.jpg",
});
```

### List files

```csharp theme={null}
using Autorender.Models.Files;

var result = await client.Files.List(new FileListParams { Limit = 10 });

foreach (var file in result.Files)
{
    Console.WriteLine($"{file.FileNo} {file.Name} {file.Url}");
}
```

### Get file details

```csharp theme={null}
var file = await client.Files.Retrieve("fi_abc123");
Console.WriteLine(file.Data.Url);
```

### Rename a file

```csharp theme={null}
using Autorender.Models.Files;

await client.Files.Rename("fi_abc123", new FileRenameParams { Name = "new-name" });
```

### Delete a file

```csharp theme={null}
await client.Files.Delete("fi_abc123");
```

### Folders

```csharp theme={null}
using Autorender.Models.Folders;

// List folders
var folders = await client.Folders.List();

// Create a folder
var folder = await client.Folders.Create(new FolderCreateParams { Name = "products" });

// Rename a folder
await client.Folders.Rename(folder.Data.FolderNo, new FolderRenameParams { Name = "product-images" });

// Delete a folder
await client.Folders.Delete(folder.Data.FolderNo);
```

### Multipart upload

For files larger than **100 MB**, use a multipart upload to split the file into parts:

```csharp theme={null}
using System.Net.Http;
using Autorender.Models.MultipartUploads;

var fileData = await File.ReadAllBytesAsync("large-video.mp4");

// Start session
var session = await client.MultipartUploads.Start(new MultipartUploadStartParams
{
    FileName = "large-video.mp4",
    FileSize = fileData.Length,
});

// Upload parts
using var http = new HttpClient();
var res = await http.PutAsync(session.Parts[0].Url, new ByteArrayContent(fileData));
var etag = res.Headers.ETag!.Tag;

// Complete
var result = await client.MultipartUploads.Complete(new MultipartUploadCompleteParams
{
    UploadId = session.UploadId,
    Parts = [new() { PartNumber = 1, Etag = etag }],
});
```

### Error handling

```csharp theme={null}
using Autorender.Exceptions;

try
{
    var file = await client.Files.Retrieve("fi_notexist");
}
catch (AutorenderException e)
{
    Console.WriteLine(e.Message);
}
```

## Resources

* [NuGet package](https://www.nuget.org/packages/Autorender/)
* [GitHub](https://github.com/autorender/autorender-dotnet)

## Next steps

<CardGroup cols={2}>
  <Card title="Direct upload API" icon="cloud-arrow-up" iconType="solid" href="/docs/api-reference/direct-upload">
    The upload endpoint this SDK calls.
  </Card>

  <Card title="Create an API key" icon="key" iconType="solid" href="/docs/create-an-api-key">
    Generate the key the client reads from the environment.
  </Card>

  <Card title="Image transformations" icon="wand-magic-sparkles" iconType="solid" href="/docs/transformations/introduction">
    Build delivery URLs from your uploaded files.
  </Card>

  <Card title="All SDKs" icon="cubes" iconType="solid" href="/docs/resources/sdks">
    Server-side clients for every language.
  </Card>
</CardGroup>
