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

# Presets

> Presets endpoints

## Overview

Presets endpoints

### Available Operations

* [List](#list) - List presets
* [Get](#get) - Get a preset
* [CreatePresetsChatCompletions](#createpresetschatcompletions) - Create a preset from a chat-completions request body
* [CreatePresetsMessages](#createpresetsmessages) - Create a preset from a messages request body
* [CreatePresetsResponses](#createpresetsresponses) - Create a preset from a responses request body
* [ListVersions](#listversions) - List versions of a preset
* [GetVersion](#getversion) - Get a specific version of a preset

## List

Lists all presets for the authenticated user, ordered by most recently updated first.

### Example Usage

```go theme={null}
package main

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

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

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

    res, err := s.Presets.List(ctx, optionalnullable.From[int64](nil), nil)
    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                                   | Example |
| --------- | ---------------------------------------------------------- | -------------------- | --------------------------------------------- | ------- |
| `ctx`     | [context.Context](https://pkg.go.dev/context#Context)      | :heavy\_check\_mark: | The context to use for the request.           |         |
| `offset`  | optionalnullable.OptionalNullable\[`int64`]                | :heavy\_minus\_sign: | Number of records to skip for pagination      | 0       |
| `limit`   | `*int64`                                                   | :heavy\_minus\_sign: | Maximum number of records to return (max 100) | 50      |
| `opts`    | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request.                 |         |

### Response

**[\*operations.ListPresetsResponse](../../models/operations/listpresetsresponse.mdx), error**

### Errors

| Error Type                            | Status Code | Content Type     |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError     | 400         | application/json |
| sdkerrors.UnauthorizedResponseError   | 401         | application/json |
| sdkerrors.InternalServerResponseError | 500         | application/json |
| sdkerrors.APIError                    | 4XX, 5XX    | \*/\*            |

## Get

Retrieves a preset by its slug with its currently designated version inline.

### Example Usage

```go theme={null}
package main

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

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

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

    res, err := s.Presets.Get(ctx, "my-preset")
    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.   |           |
| `slug`    | `string`                                                   | :heavy\_check\_mark: | URL-safe slug identifying the preset. | my-preset |
| `opts`    | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request.         |           |

### Response

**[\*components.GetPresetResponse](../../models/components/getpresetresponse.mdx), error**

### Errors

| Error Type                            | Status Code | Content Type     |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError     | 400         | application/json |
| sdkerrors.UnauthorizedResponseError   | 401         | application/json |
| sdkerrors.NotFoundResponseError       | 404         | application/json |
| sdkerrors.InternalServerResponseError | 500         | application/json |
| sdkerrors.APIError                    | 4XX, 5XX    | \*/\*            |

## CreatePresetsChatCompletions

Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.

### 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/optionalnullable"
	"log"
)

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

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

    res, err := s.Presets.CreatePresetsChatCompletions(ctx, "my-preset", components.ChatRequest{
        Messages: []components.ChatMessages{
            components.CreateChatMessagesSystem(
                components.ChatSystemMessage{
                    Content: components.CreateChatSystemMessageContentStr(
                        "You are a helpful assistant.",
                    ),
                    Role: components.ChatSystemMessageRoleSystem,
                },
            ),
            components.CreateChatMessagesUser(
                components.ChatUserMessage{
                    Content: components.CreateChatUserMessageContentStr(
                        "Hello!",
                    ),
                    Role: components.ChatUserMessageRoleUser,
                },
            ),
        },
        Model: openrouter.Pointer("openai/gpt-5.4"),
        Temperature: optionalnullable.From(openrouter.Pointer[float64](0.7)),
    })
    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.                                 |                                                                                                                                                                                                                                                                                                 |
| `slug`        | `string`                                                          | :heavy\_check\_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset                                                                                                                                                                                                                                                                                       |
| `chatRequest` | [components.ChatRequest](../../models/components/chatrequest.mdx) | :heavy\_check\_mark: | N/A                                                                 | \{<br />"max\_tokens": 150,<br />"messages": \[<br />\{<br />"content": "You are a helpful assistant.",<br />"role": "system"<br />},<br />\{<br />"content": "What is the capital of France?",<br />"role": "user"<br />}<br />],<br />"model": "openai/gpt-4",<br />"temperature": 0.7<br />} |
| `opts`        | \[][operations.Option](../../models/operations/option.mdx)        | :heavy\_minus\_sign: | The options for this request.                                       |                                                                                                                                                                                                                                                                                                 |

### Response

**[\*components.CreatePresetFromInferenceResponse](../../models/components/createpresetfrominferenceresponse.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.ConflictResponseError       | 409         | application/json |
| sdkerrors.InternalServerResponseError | 500         | application/json |
| sdkerrors.APIError                    | 4XX, 5XX    | \*/\*            |

## CreatePresetsMessages

Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.

### 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.Presets.CreatePresetsMessages(ctx, "my-preset", components.MessagesRequest{
        MaxTokens: openrouter.Pointer[int64](1024),
        Messages: []components.MessagesMessageParam{
            components.MessagesMessageParam{
                Content: components.CreateMessagesMessageParamContentUnion5Str(
                    "Hello!",
                ),
                Role: components.MessagesMessageParamRoleUser,
            },
        },
        Model: "anthropic/claude-4.6-sonnet",
        System: openrouter.Pointer(components.CreateSystemStr(
            "You are a helpful assistant.",
        )),
    })
    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.                                 |                                                                                                                                                                                                                         |
| `slug`            | `string`                                                                  | :heavy\_check\_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset                                                                                                                                                                                                               |
| `messagesRequest` | [components.MessagesRequest](../../models/components/messagesrequest.mdx) | :heavy\_check\_mark: | N/A                                                                 | \{<br />"max\_tokens": 1024,<br />"messages": \[<br />\{<br />"content": "Hello, how are you?",<br />"role": "user"<br />}<br />],<br />"model": "anthropic/claude-4.5-sonnet-20250929",<br />"temperature": 0.7<br />} |
| `opts`            | \[][operations.Option](../../models/operations/option.mdx)                | :heavy\_minus\_sign: | The options for this request.                                       |                                                                                                                                                                                                                         |

### Response

**[\*components.CreatePresetFromInferenceResponse](../../models/components/createpresetfrominferenceresponse.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.ConflictResponseError       | 409         | application/json |
| sdkerrors.InternalServerResponseError | 500         | application/json |
| sdkerrors.APIError                    | 4XX, 5XX    | \*/\*            |

## CreatePresetsResponses

Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.

### 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/optionalnullable"
	"log"
)

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

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

    res, err := s.Presets.CreatePresetsResponses(ctx, "my-preset", components.ResponsesRequest{
        Input: openrouter.Pointer(components.CreateInputsUnionStr(
            "Hello!",
        )),
        Instructions: optionalnullable.From(openrouter.Pointer("You are a helpful assistant.")),
        Model: openrouter.Pointer("openai/gpt-5.4"),
    })
    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.                                 |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `slug`             | `string`                                                                    | :heavy\_check\_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `responsesRequest` | [components.ResponsesRequest](../../models/components/responsesrequest.mdx) | :heavy\_check\_mark: | N/A                                                                 | \{<br />"input": \[<br />\{<br />"content": "Hello, how are you?",<br />"role": "user",<br />"type": "message"<br />}<br />],<br />"model": "anthropic/claude-4.5-sonnet-20250929",<br />"temperature": 0.7,<br />"tools": \[<br />\{<br />"description": "Get the current weather in a given location",<br />"name": "get\_current\_weather",<br />"parameters": \{<br />"properties": \{<br />"location": \{<br />"type": "string"<br />}<br />},<br />"type": "object"<br />},<br />"type": "function"<br />}<br />],<br />"top\_p": 0.9<br />} |
| `opts`             | \[][operations.Option](../../models/operations/option.mdx)                  | :heavy\_minus\_sign: | The options for this request.                                       |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |

### Response

**[\*components.CreatePresetFromInferenceResponse](../../models/components/createpresetfrominferenceresponse.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.ConflictResponseError       | 409         | application/json |
| sdkerrors.InternalServerResponseError | 500         | application/json |
| sdkerrors.APIError                    | 4XX, 5XX    | \*/\*            |

## ListVersions

Lists all versions of a preset, ordered by version number ascending (oldest first).

### Example Usage

```go theme={null}
package main

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

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

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

    res, err := s.Presets.ListVersions(ctx, "my-preset", optionalnullable.From[int64](nil), nil)
    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                                   | Example   |
| --------- | ---------------------------------------------------------- | -------------------- | --------------------------------------------- | --------- |
| `ctx`     | [context.Context](https://pkg.go.dev/context#Context)      | :heavy\_check\_mark: | The context to use for the request.           |           |
| `slug`    | `string`                                                   | :heavy\_check\_mark: | URL-safe slug identifying the preset.         | my-preset |
| `offset`  | optionalnullable.OptionalNullable\[`int64`]                | :heavy\_minus\_sign: | Number of records to skip for pagination      | 0         |
| `limit`   | `*int64`                                                   | :heavy\_minus\_sign: | Maximum number of records to return (max 100) | 50        |
| `opts`    | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request.                 |           |

### Response

**[\*operations.ListPresetVersionsResponse](../../models/operations/listpresetversionsresponse.mdx), error**

### Errors

| Error Type                            | Status Code | Content Type     |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError     | 400         | application/json |
| sdkerrors.UnauthorizedResponseError   | 401         | application/json |
| sdkerrors.NotFoundResponseError       | 404         | application/json |
| sdkerrors.InternalServerResponseError | 500         | application/json |
| sdkerrors.APIError                    | 4XX, 5XX    | \*/\*            |

## GetVersion

Retrieves a specific version of a preset by its slug and version number.

### Example Usage

```go theme={null}
package main

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

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

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

    res, err := s.Presets.GetVersion(ctx, "my-preset", "1")
    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.   |           |
| `slug`    | `string`                                                   | :heavy\_check\_mark: | URL-safe slug identifying the preset. | my-preset |
| `version` | `string`                                                   | :heavy\_check\_mark: | Version number of the preset.         | 1         |
| `opts`    | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request.         |           |

### Response

**[\*components.GetPresetVersionResponse](../../models/components/getpresetversionresponse.mdx), error**

### Errors

| Error Type                            | Status Code | Content Type     |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError     | 400         | application/json |
| sdkerrors.UnauthorizedResponseError   | 401         | application/json |
| sdkerrors.NotFoundResponseError       | 404         | application/json |
| sdkerrors.InternalServerResponseError | 500         | application/json |
| sdkerrors.APIError                    | 4XX, 5XX    | \*/\*            |
