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

# Files

> Files endpoints

## Overview

Files endpoints

### Available Operations

* [List](#list) - List files
* [Upload](#upload) - Upload a file
* [Delete](#delete) - Delete a file
* [Retrieve](#retrieve) - Get file metadata
* [Download](#download) - Download file content

## List

Lists files belonging to the workspace of the authenticating API key.

### Example Usage

```go theme={null}
package main

import(
	"context"
	"os"
	openrouter "github.com/OpenRouterTeam/go-sdk"
	"github.com/OpenRouterTeam/go-sdk/models/components"
	"github.com/OpenRouterTeam/go-sdk/models/operations"
	"log"
)

func main() {
    ctx := context.Background()

    s := openrouter.New(
        openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
    )

    res, err := s.Files.List(ctx, &operations.ListFilesRequest{
        Provider: components.FileProviderOpenai.ToPointer(),
    })
    if err != nil {
        log.Fatal(err)
    }
    if res != nil {
        for {
            // handle items

            res, err = res.Next()

            if err != nil {
                // handle error
            }

            if res == nil {
                break
            }
        }
    }
}
```

### Parameters

| Parameter | Type                                                                        | Required             | Description                                |
| --------- | --------------------------------------------------------------------------- | -------------------- | ------------------------------------------ |
| `ctx`     | [context.Context](https://pkg.go.dev/context#Context)                       | :heavy\_check\_mark: | The context to use for the request.        |
| `request` | [operations.ListFilesRequest](../../models/operations/listfilesrequest.mdx) | :heavy\_check\_mark: | The request object to use for the request. |
| `opts`    | \[][operations.Option](../../models/operations/option.mdx)                  | :heavy\_minus\_sign: | The options for this request.              |

### Response

**[\*operations.ListFilesResponse](../../models/operations/listfilesresponse.mdx), error**

### Errors

| Error Type                                | Status Code | Content Type     |
| ----------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError         | 400         | application/json |
| sdkerrors.UnauthorizedResponseError       | 401         | application/json |
| sdkerrors.ForbiddenResponseError          | 403         | application/json |
| sdkerrors.TooManyRequestsResponseError    | 429         | application/json |
| sdkerrors.InternalServerResponseError     | 500         | application/json |
| sdkerrors.BadGatewayResponseError         | 502         | application/json |
| sdkerrors.ServiceUnavailableResponseError | 503         | application/json |
| sdkerrors.APIError                        | 4XX, 5XX    | \*/\*            |

## Upload

Uploads a file to be referenced in future API calls. The file is stored under the workspace of the authenticating API key. Maximum file size: 100 MB.

### Example Usage

```go theme={null}
package main

import(
	"context"
	"os"
	openrouter "github.com/OpenRouterTeam/go-sdk"
	"github.com/OpenRouterTeam/go-sdk/models/operations"
	"github.com/OpenRouterTeam/go-sdk/models/components"
	"log"
)

func main() {
    ctx := context.Background()

    s := openrouter.New(
        openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
    )

    example, fileErr := os.Open("example.file")
    if fileErr != nil {
        panic(fileErr)
    }

    res, err := s.Files.Upload(ctx, operations.UploadFileRequestBody{
        File: operations.UploadFileFile{
            FileName: "example.file",
            Content: example,
        },
    }, nil, components.FileProviderOpenai.ToPointer())
    if err != nil {
        log.Fatal(err)
    }
    if res != nil {
        switch res.Type {
            case components.FileResponseTypeAnthropic:
                // res.AnthropicFile is populated
            case components.FileResponseTypeOpenai:
                // res.OpenAIFile is populated
            case components.FileResponseTypeOpenrouter:
                // res.OpenRouterFile is populated
            default:
                // Unknown type - use res.GetUnknownRaw() for raw JSON
        }

    }
}
```

### Parameters

| Parameter     | Type                                                                                  | Required             | Description                                                                                                  | Example                              |
| ------------- | ------------------------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------ |
| `ctx`         | [context.Context](https://pkg.go.dev/context#Context)                                 | :heavy\_check\_mark: | The context to use for the request.                                                                          |                                      |
| `requestBody` | [operations.UploadFileRequestBody](../../models/operations/uploadfilerequestbody.mdx) | :heavy\_check\_mark: | N/A                                                                                                          |                                      |
| `workspaceID` | `*string`                                                                             | :heavy\_minus\_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace.                               | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
| `provider`    | [\*components.FileProvider](../../models/components/fileprovider.mdx)                 | :heavy\_minus\_sign: | Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage. | openai                               |
| `opts`        | \[][operations.Option](../../models/operations/option.mdx)                            | :heavy\_minus\_sign: | The options for this request.                                                                                |                                      |

### Response

**[\*components.FileResponse](../../models/components/fileresponse.mdx), error**

### Errors

| Error Type                                | Status Code | Content Type     |
| ----------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError         | 400         | application/json |
| sdkerrors.UnauthorizedResponseError       | 401         | application/json |
| sdkerrors.ForbiddenResponseError          | 403         | application/json |
| sdkerrors.PayloadTooLargeResponseError    | 413         | application/json |
| sdkerrors.TooManyRequestsResponseError    | 429         | application/json |
| sdkerrors.InternalServerResponseError     | 500         | application/json |
| sdkerrors.BadGatewayResponseError         | 502         | application/json |
| sdkerrors.ServiceUnavailableResponseError | 503         | application/json |
| sdkerrors.APIError                        | 4XX, 5XX    | \*/\*            |

## Delete

Deletes a file owned by the requesting workspace. Deletion is irreversible.

### Example Usage

```go theme={null}
package main

import(
	"context"
	"os"
	openrouter "github.com/OpenRouterTeam/go-sdk"
	"github.com/OpenRouterTeam/go-sdk/models/components"
	"log"
)

func main() {
    ctx := context.Background()

    s := openrouter.New(
        openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
    )

    res, err := s.Files.Delete(ctx, "file_011CNha8iCJcU1wXNR6q4V8w", nil, components.FileProviderOpenai.ToPointer())
    if err != nil {
        log.Fatal(err)
    }
    if res != nil {
        switch res.Type {
            case components.FileDeleteResponseTypeAnthropic:
                // res.AnthropicFileDeleted is populated
            case components.FileDeleteResponseTypeOpenai:
                // res.OpenAIFileDeleted is populated
            case components.FileDeleteResponseTypeOpenrouter:
                // res.OpenRouterFileDeleted is populated
            default:
                // Unknown type - use res.GetUnknownRaw() for raw JSON
        }

    }
}
```

### Parameters

| Parameter     | Type                                                                  | Required             | Description                                                                                                  | Example                              |
| ------------- | --------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------ |
| `ctx`         | [context.Context](https://pkg.go.dev/context#Context)                 | :heavy\_check\_mark: | The context to use for the request.                                                                          |                                      |
| `fileID`      | `string`                                                              | :heavy\_check\_mark: | N/A                                                                                                          | or\_file\_011CNha8iCJcU1wXNR6q4V8w   |
| `workspaceID` | `*string`                                                             | :heavy\_minus\_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace.                               | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
| `provider`    | [\*components.FileProvider](../../models/components/fileprovider.mdx) | :heavy\_minus\_sign: | Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage. | openai                               |
| `opts`        | \[][operations.Option](../../models/operations/option.mdx)            | :heavy\_minus\_sign: | The options for this request.                                                                                |                                      |

### Response

**[\*components.FileDeleteResponse](../../models/components/filedeleteresponse.mdx), error**

### Errors

| Error Type                                | Status Code | Content Type     |
| ----------------------------------------- | ----------- | ---------------- |
| sdkerrors.UnauthorizedResponseError       | 401         | application/json |
| sdkerrors.ForbiddenResponseError          | 403         | application/json |
| sdkerrors.NotFoundResponseError           | 404         | application/json |
| sdkerrors.TooManyRequestsResponseError    | 429         | application/json |
| sdkerrors.InternalServerResponseError     | 500         | application/json |
| sdkerrors.BadGatewayResponseError         | 502         | application/json |
| sdkerrors.ServiceUnavailableResponseError | 503         | application/json |
| sdkerrors.APIError                        | 4XX, 5XX    | \*/\*            |

## Retrieve

Retrieves metadata for a single file owned by the requesting workspace.

### Example Usage

```go theme={null}
package main

import(
	"context"
	"os"
	openrouter "github.com/OpenRouterTeam/go-sdk"
	"github.com/OpenRouterTeam/go-sdk/models/components"
	"log"
)

func main() {
    ctx := context.Background()

    s := openrouter.New(
        openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
    )

    res, err := s.Files.Retrieve(ctx, "file_011CNha8iCJcU1wXNR6q4V8w", nil, components.FileProviderOpenai.ToPointer())
    if err != nil {
        log.Fatal(err)
    }
    if res != nil {
        switch res.Type {
            case components.FileResponseTypeAnthropic:
                // res.AnthropicFile is populated
            case components.FileResponseTypeOpenai:
                // res.OpenAIFile is populated
            case components.FileResponseTypeOpenrouter:
                // res.OpenRouterFile is populated
            default:
                // Unknown type - use res.GetUnknownRaw() for raw JSON
        }

    }
}
```

### Parameters

| Parameter     | Type                                                                  | Required             | Description                                                                                                  | Example                              |
| ------------- | --------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------ |
| `ctx`         | [context.Context](https://pkg.go.dev/context#Context)                 | :heavy\_check\_mark: | The context to use for the request.                                                                          |                                      |
| `fileID`      | `string`                                                              | :heavy\_check\_mark: | N/A                                                                                                          | or\_file\_011CNha8iCJcU1wXNR6q4V8w   |
| `workspaceID` | `*string`                                                             | :heavy\_minus\_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace.                               | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
| `provider`    | [\*components.FileProvider](../../models/components/fileprovider.mdx) | :heavy\_minus\_sign: | Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage. | openai                               |
| `opts`        | \[][operations.Option](../../models/operations/option.mdx)            | :heavy\_minus\_sign: | The options for this request.                                                                                |                                      |

### Response

**[\*components.FileResponse](../../models/components/fileresponse.mdx), error**

### Errors

| Error Type                                | Status Code | Content Type     |
| ----------------------------------------- | ----------- | ---------------- |
| sdkerrors.UnauthorizedResponseError       | 401         | application/json |
| sdkerrors.ForbiddenResponseError          | 403         | application/json |
| sdkerrors.NotFoundResponseError           | 404         | application/json |
| sdkerrors.TooManyRequestsResponseError    | 429         | application/json |
| sdkerrors.InternalServerResponseError     | 500         | application/json |
| sdkerrors.BadGatewayResponseError         | 502         | application/json |
| sdkerrors.ServiceUnavailableResponseError | 503         | application/json |
| sdkerrors.APIError                        | 4XX, 5XX    | \*/\*            |

## Download

Downloads the raw bytes of a file. Only files created server-side are downloadable; uploaded files return 400.

### Example Usage

```go theme={null}
package main

import(
	"context"
	"os"
	openrouter "github.com/OpenRouterTeam/go-sdk"
	"github.com/OpenRouterTeam/go-sdk/models/components"
	"log"
)

func main() {
    ctx := context.Background()

    s := openrouter.New(
        openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
    )

    res, err := s.Files.Download(ctx, "file_011CNha8iCJcU1wXNR6q4V8w", nil, components.FileProviderOpenai.ToPointer())
    if err != nil {
        log.Fatal(err)
    }
    if res != nil {
        // handle response
    }
}
```

### Parameters

| Parameter     | Type                                                                  | Required             | Description                                                                                                  | Example                              |
| ------------- | --------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------ |
| `ctx`         | [context.Context](https://pkg.go.dev/context#Context)                 | :heavy\_check\_mark: | The context to use for the request.                                                                          |                                      |
| `fileID`      | `string`                                                              | :heavy\_check\_mark: | N/A                                                                                                          | or\_file\_011CNha8iCJcU1wXNR6q4V8w   |
| `workspaceID` | `*string`                                                             | :heavy\_minus\_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace.                               | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
| `provider`    | [\*components.FileProvider](../../models/components/fileprovider.mdx) | :heavy\_minus\_sign: | Store or read this file on the named provider using your own API key for it. Omit to use OpenRouter storage. | openai                               |
| `opts`        | \[][operations.Option](../../models/operations/option.mdx)            | :heavy\_minus\_sign: | The options for this request.                                                                                |                                      |

### Response

**[io.ReadCloser](../../.mdx), error**

### Errors

| Error Type                                | Status Code | Content Type     |
| ----------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError         | 400         | application/json |
| sdkerrors.UnauthorizedResponseError       | 401         | application/json |
| sdkerrors.ForbiddenResponseError          | 403         | application/json |
| sdkerrors.NotFoundResponseError           | 404         | application/json |
| sdkerrors.TooManyRequestsResponseError    | 429         | application/json |
| sdkerrors.InternalServerResponseError     | 500         | application/json |
| sdkerrors.BadGatewayResponseError         | 502         | application/json |
| sdkerrors.ServiceUnavailableResponseError | 503         | application/json |
| sdkerrors.APIError                        | 4XX, 5XX    | \*/\*            |
